spa*_*man 21 ajax jquery 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);
}
Run Code Online (Sandbox Code Playgroud)
小智 34
在AJAX操作中只需添加:async: false
after datatype: "json"
,这应该可以解决您的问题.Chrome有处理异步调用的问题.
spa*_*man 12
我刚看到这个问题得到了很多意见,而且仍然存在.我完全忘了它,希望这会让我关闭它.
将datatype参数设置为nothing,甚至完全删除datatype参数将解决问题.
在我的例子中,我返回一个渲染的视图(字符串中的html片段),在这段代码中我将数据类型指定为json,而实际上并非如此.大多数其他浏览器似乎忽略了数据类型,如果它不正确并继续生活,允许我追加html结果.
Chrome会抛出错误.状态文本正常,状态代码为200,因为实际的ajax请求经过了很好的处理.这个问题与请求本身无关,问题是返回的数据不是我告诉它的.
因此镀铬破裂.如果我完全删除数据类型参数,chrome会在数据获取时确定数据.如果我将数据类型参数设置为"html",那么它也可以正常工作.
长话短说,问题不在于镀铬.是我.因为我这样愚蠢.我将此标记为这个问题的答案,因为它回答了我在原始问题中提出的例子.
在评论中,其他人已经描述了其他情况,这种解决方案很可能无济于事.
小智 11
我不知道你是否还有这个问题,但我今天遇到了类似的错误.我正在调用一个aspx页面来返回一个带有responseText的字符串,Chrome从未返回任何内容.原来我在我的aspx页面中有一个Response.Close,它在其他地方工作,但可能没有向Chrome和/或Safari发送一些必需的标题或东西.希望能帮助别人.
一天半之后,我克服了它,所以我可能会......
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);
}
}
Run Code Online (Sandbox Code Playgroud)