2010-09-12 71 views
3

我有一个AJAX请求:jQuery的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中的一个bug。

+2

这首先要求对基本的调试。控制台中的任何错误消息? Firebug说什么 - 请求是否真的被解雇?他们返回什么状态码?你发送什么样的数据?为什么显式的内容类型? – 2010-09-12 17:51:36

+0

在控制台中是否有任何javascript错误? – 2010-09-12 17:52:13

+0

@Pekka - 感谢您的评论。我更新了这个问题,我应该提到所有的数据,但基本的调试显然没有显示任何内容。回调是根本不被解雇。 – 2010-09-12 19:31:53

回答

3

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

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

而且要设置的contentTypeapplication/x-www-form-urlencoded,而你的数据参数被称为xmlData假设XML。通过将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) { 

    } 
}); 
+0

Darin,[数据:'']在这里做什么?在此之前,他正在使用它发送一个我假设的值由一个名为'xmlData'的变量保存,该变量已替换为''。究竟发生了什么? – d2burke 2010-09-12 21:17:18

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 
}); 
+0

有你去,鹰眼! :P – 2010-09-12 18:00:27

+0

谢谢,但这不是问题。 – 2010-09-12 19:31:10

0

你尝试使用“的dataType”而不是“数据”?一拉:

尝试:

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

否 - 显然我必须发布xml数据。 – 2010-09-12 19:46:53

+0

好吧,我的道歉,你并不总是需要发送接收,我不清楚,因为你的PHP没有明确说明它正在接收任何东西,但仍然是我的疏忽。无论如何,那么你是否仍然需要声明dataType?你试过这个吗? – d2burke 2010-09-12 19:55:22

+0

试过 - 没有用。 – 2010-09-12 20:01:57