我在我的页面上运行了以下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);
}
答案 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
。