chrome中的jquery ajax问题

时间:2009-11-16 12:58:46

标签: jquery ajax google-chrome

我在我的页面上运行了以下jquery代码,在FF和IE中运行得很好,但是chrome似乎吓坏了..

在FF和IE中进行调用,结果附加到div。 在chrome中,它在失败时调用ajaxfailed。

传递给AjaxFailed函数的XMLHttpRequest的状态代码为“200”,statusText为“ok”。 readystate是4,responseText被设置为我希望附加到div的数据..基本上从我可以看到它调用失败方法,但它没有失败..我尝试了get和post请求和它总是打破铬。

function getBranchDetails(contactID, branchID) {
  $.ajax({
    type: "GET",
    url: urlToRequestTo,
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: branchDetailsSuccess,
    error: AjaxFailed
  });
}



 function branchDetailsSuccess(result) {
      $("#divBranchControl").empty();
      $("#divBranchControl").append(" " + result);
      $("#branchDiv").tabs();
    }



 function AjaxFailed(result) {
      alert("FAILED : " + result.status + ' ' + result.statusText);
    }

8 个答案:

答案 0 :(得分:34)

在AJAX操作中,只需在async: false之后添加datatype: "json"即可解决您的问题。 Chrome有处理异步调用的问题。

答案 1 :(得分:12)

我刚看到这个问题得到了很多意见,而且仍然存在。我完全忘记了它,希望这会让我关闭它。

将datatype参数设置为nothing,甚至完全删除数据类型参数将解决问题。

在我的示例中,我返回一个渲染视图(字符串中的html片段),在此代码中,我将数据类型指定为json,而实际上并非如此。大多数其他浏览器似乎忽略了数据类型,如果它不正确并继续生活,允许我附加html结果。

Chrome会抛出错误。 状态文本正常,状态代码为200,因为实际的ajax请求经过了很好的处理。这个问题与请求本身无关,问题是返回的数据不是我告诉chrome的数据。

所以铬破坏了。 如果我完全删除数据类型参数,chrome会在数据获取时确定数据。如果我将数据类型参数设置为“html”,那么它也可以正常工作。

长话短说,问题不在于铬。是我。因为我这样愚蠢。我将此标记为这个问题的答案,因为它回答了我在原始问题中提出的例子。

在评论中,其他人已经描述了其他情况,这种解决方案很可能无济于事。

答案 2 :(得分:11)

我不知道你是否还有这个问题,但我今天遇到了类似的错误。我正在调用一个aspx页面来返回一个带有responseText的字符串,Chrome从未返回任何内容。原来我在我的aspx页面中有一个Response.Close,它在其他地方工作,但可能没有向Chrome和/或Safari发送一些必需的标题或东西。希望有所帮助。

答案 3 :(得分:7)

经过一天半的时间我克服了它,所以我可能会出现.....

function getBranchDetails(contactID, branchID) {

  $.ajax({
    type: "GET",
    url: urlToRequestTo,
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: branchDetailsSuccess,
    error: branchAjaxFailed
  });
}

function branchDetailsSuccess(result) {
  $("#divBranchControl").empty();
  $("#divBranchControl").append(" " + result);
  $("#branchDiv").tabs();
}

function branchAjaxFailed(result) {
  if (result.status == 200 && result.statusText == "OK") {
    //this is here only because chrome breaks on this method only for no reason whatsoever.
    //chrome sees the request as failed, but everything happens fine...
    branchDetailsSuccess(result.responseText);
  }
  else {
    alert("FAILED : " + result.status + ' ' + result.statusText);
  }
}

答案 4 :(得分:1)

尝试将数据参数设置为“”。

对于GET个请求,data参数将附加到URL。不知道为什么Chrome会遇到问题,但值得一试:)

答案 5 :(得分:0)

尝试成功:

success: function(response) { branchDetailsSuccess(response); },

答案 6 :(得分:0)

我刚在Chrome浏览器中遇到了这个问题(在Firefox中很好用),然后在ajax参数中添加>>> keyphrase = 'password' >>> list(enumerate(keyphrase)) # add indices [(0, 'p'), (1, 'a'), (2, 's'), (3, 's'), (4, 'w'), (5, 'o'), (6, 'r'), (7, 'd')] >>> sorted(enumerate(keyphrase), key=lambda p: p[1]) # sorted on the letter [(1, 'a'), (7, 'd'), (5, 'o'), (0, 'p'), (6, 'r'), (2, 's'), (3, 's'), (4, 'w')] >>> [i for i, c in sorted(enumerate(keyphrase), key=lambda p: p[1])] # just the indices [1, 7, 5, 0, 6, 2, 3, 4] 即可解决问题。

答案 7 :(得分:-1)

在servlet中使用POST方法并更改type:POST中的$.ajax