chrome中的jquery ajax问题

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: falseafter datatype: "json",这应该可以解决您的问题.Chrome有处理异步调用的问题.

  • 处理异步电话的问题是什么? (7认同)

spa*_*man 12

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

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

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

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

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

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

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


小智 11

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

  • 这对我也有用.具体来说,我的解决方案是注释掉//response.Close(); 调用response.Flush()之后和调用response.End()之前 (3认同)
  • 用Response.End()替换Response.Close()修复它!非常感谢! (3认同)

spa*_*man 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 今天我跑到这里,将数据部分设置为""做了伎俩.谢谢! (4认同)
  • 我也有这个问题 - 数据:""是关键. (2认同)