jQuery AJAX回调没有被解雇

时间:2010-09-12 17:48:57

标签: php jquery ajax

我有一个AJAX请求:

$.ajax({
   url : "proxy.php",
   type : "POST",
   data : xmlData,
   contentType : "application/x-www-form-urlencoded",
   processData : false,
   success : function(data) {
       // success
   },
   error : function(data) {
       // error
   },    
});

PHP代理正在回答这个问题:

header('Content-type: text/xml');
echo $someXmlResponse;
exit();

没有一个回调被解雇,既没有成功也没有错误。

这不是我第一次有这个。发生了什么事?


编辑:一些更新 - 尾随逗号不是问题,但感谢您指出。控制台显示没有错误。 Firebug显示请求已正确发送和接收。请求返回状态为200 OK,数据正确返回。


感谢所有帮助人员。您的所有反馈都已到位。但实际上没有人能解决这个问题它看起来像Firefox 4b5中的一个错误。

3 个答案:

答案 0 :(得分:3)

如果服务器返回无法解析的无效XML,则可能会发生您正在观察的行为。尝试返回保证有效XML的内容:

header('Content-Type: text/xml'); // <-- Notice the Content-Type header casing
echo '<foo/>';
exit();

您还要将contentType设置为application/x-www-form-urlencoded,而假设XML则将数据参数称为xmlData。通过将processData参数设置为false,您指示数据应按原样发布,而不是自动转换为application/x-www-form-urlencoded,并且您仍然在请求中指明此内容类型,这似乎是矛盾的。

此外,如果您希望服务器提供XML,则可以指定dataType: 'xml'

所以您的请求可能如下所示:

$.ajax({
    url: 'proxy.php',
    type: 'POST',
    contentType: 'text/xml',
    data: '<request/>',
    processData: false,
    dataType: 'xml',
    success: function(data) {

    },
    error: function(data) {

    }
});

答案 1 :(得分:2)

这可能不是您的问题,但是会在某些版本的IE中导致问题。在error:回调后,您有一个逗号逗号。

是否是问题,你应该删除它。

$.ajax({
   url : "proxy.php",
   type : "POST",
   data : xmlData,
   contentType : "application/x-www-form-urlencoded",
   processData : false,
   success : function(data) {
       // success
   },
   error : function(data) {
       // error
   }  // <--- removed trailing comma
});

答案 2 :(得分:0)

你尝试过使用'dataType'而不是'data'吗? la:

尝试:

$.ajax({
   url : "proxy.php",
   type : "POST",
   dataType : 'xml',
   contentType : "application/x-www-form-urlencoded",
   processData : false,
   success : function(xml) {
       // success
   },
   error : function(xml) {
       // error
   }  
});