chrome中的jquery ajax问题

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

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

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

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

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

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

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

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

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

我不知道你是否还有这个问题,但我今天遇到了类似的错误。 我正在调用一个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); } } 

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

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

试试这个成功:

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

我刚刚在Chrome中遇到过这个问题(在Firefox中很好)并添加async: true来解决它的ajax参数。

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