无法从jQuery AJAX请求获得响应

时间:2012-09-10 23:53:47

标签: javascript jquery ajax firefox google-chrome

当我希望客户端停止长轮询时,我会发回一个

的AJAX响应
"HUPWAIT"

这就是萤火虫的反应。

The response in FF.

但是当我尝试在我的js中获取AJAX响应时,以下两者在Firefox和IE9中都返回false:

$.ajax({
  url: "/wait",
  success: function(data) {
      console.log(data == "\"HUPWAIT\""); //returns false
      console.log(data == "HUPWAIT"); //also returns false
});

有趣的是,Chrome中相同的代码返回true:

$.ajax({
  url: "/wait",
  success: function(data) {
      console.log(data == "\"HUPWAIT\""); //returns true in Chrome
});

当我尝试使用以下代码在Firefox(使用firebug)中进行调试时,我得到一个奇怪的回应:

$.ajax({
  url: "/wait",
  success: function(data) {
      console.log(data); //returns Document
      console.log(''+data); //returns [object XMLDocument]
});

标题看起来很正常:

HTTP/1.1 200 OK
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Transfer-Encoding: chunked
Via: XXXXXXXXXX
Date: Mon, 10 Sep 2012 23:40:34 GMT
Server: nginx/1.2.3

但是在firebug的XML选项卡中有一些奇怪的东西:

XML Parsing Error: syntax error Location: moz-nullprincipal:{16915058-4ead-41ef-a63e-1265ee278d74} Line Number 1, Column 1:
"HUPWAIT"
 ^

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

Firefox / IE将尝试将AJAX(X = XML)响应解析为XML文档,从而产生您在调试器中看到的错误。向响应(text/plain)添加“Content-Type”标头将强制浏览器正确处理文本。

答案 1 :(得分:1)

您是否尝试在AJAX调用中指定dataType

$.ajax({
    url: "/wait",
    dataType: "text",
    success: function(data) {
        console.log(data == "\"HUPWAIT\""); //returns false
        console.log(data == "HUPWAIT"); //also returns false
});

答案 2 :(得分:0)

您还可以检查原始responseText:

$.ajax({
    url: "/wait",
    success: function(data, status, jqXHR) {
    console.log(jqXHR.responseText == "\"HUPWAIT\"");
    console.log(jqXHR.responseText == "HUPWAIT");
    console.log(jqXHR.responseText);
});