jquery ajax调用不工作?!firefox或xss问题?

jquery ajax call not working?! firefox or xss problem?

我的问题是:在火狐里,我没有任何反应。在IE中,它工作得很好。我希望对本地脚本进行Ajax调用,以获取纯文本或其他形式的信息。但它不起作用。我认为此时交叉脚本不应该是个问题,还是?

javascript代码很简单:

1
2
3
4
5
6
7
8
9
10
11
12
var targetUrl ="http://localhost/jQueryProxy.php";
var parameters =""; // later

$.ajax({    
  type:"GET",
  async: true,
  url: targetUrl,
  data: parameters,
  success: function(param1, param2){
    alert(param1);
  }
});

还有PHP代码:

1
2
3
4
<?php
   header('Content-type: text/xml'));
   echo"test";
?>


试试var targetUrl ="/jQueryProxy.php";。此外,您还可以检查firefox的javascript控制台以查找错误:ctrl+shift+j

您还可以尝试通过添加一个处理程序(源代码)来查找jquery的Ajax错误消息:

1
2
3
4
5
error:function (xhr, ajaxOptions, thrownError){
    alert(xhr.status);
    alert(xhr.statusText);
    alert(thrownError);
 }

更新:我做了一些测试,似乎是火狐阻止了Ajax从本地文件到网络(也就是本地主机),但没有抛出异常。在success使用alert($('*', param1).text());显示当前文档的内容,这很奇怪。将XML作为本地文件也不起作用,FF和IE的行为是不一致的——它们的行为非常不同。最好将HTML放在服务器(localhost)上,与XML文件(此处为80)位于同一端口。另外,当XML有效时,考虑添加dataType:'xml'


这是一个XSS问题。通常,本地HTML页面比公共HTML页面更沙盒化。


这是因为内容类型是text/xml,但它不是有效的XML。

如果希望它是XML,请将echo更改为:

1
2
<?xml version="1.0" encoding="UTF-8"?>
<foo>test</foo>


这似乎适用于FF:

1
2
3
4
5
6
7
8
9
10
11
12
var targetUrl ="http://localhost/jQueryProxy.php";
var parameters =""; // later

$.ajax({    
  type:"GET",
  async: true,
  url: targetUrl,
  data: parameters,
  success: function(param1, param2){
    alert($(param1).find("foo").text());
  }
});

PHP看起来是这样的:

1
2
3
4
<?php
   header('Content-type: text/xml');
   echo '<?xml version="1.0" encoding="UTF-8"?><foo>test</foo>';
?>

最好的问候,

比约恩