【问题标题】:Getting AJAX response body for use in error callback获取 AJAX 响应正文以在错误回调中使用
【发布时间】:2010-01-18 07:29:54
【问题描述】:

jQuery的AJAX错误函数有以下参数:

error(XMLHttpRequest, textStatus, errorThrown)

获取响应正文的最佳跨浏览器方式是什么?

这是否有效(在所有浏览器中都可靠)?

$.ajax({
  error: function(http) {
    alert(http.responseText);
  }
});

【问题讨论】:

  • http.responseText 适用于所有现代浏览器,并且针对所有 4xx 和 5xx HTTP 状态错误触发错误处理程序。您可以通过检查可作为“http.status”访问的 HTTP 状态代码来改变错误处理

标签: jquery ajax


【解决方案1】:

从 jQuery 1.4.1 开始,您应该使用:

var json = JSON.parse(xhr.responseText);

http://api.jquery.com/jQuery.parseJSON/

【讨论】:

  • 当然,在确保内容类型实际上是 JSON 之后。
  • 它现在说,“从 jQuery 3.0 开始,不推荐使用 $.parseJSON。要解析 JSON 字符串,请改用本机 JSON.parse 方法。”
【解决方案2】:

对于更新和一般的答案(自 jquery 1.5 起),我会使用 jqXHR 对象:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.responseText);
})

或者responseJSON 可用于获取已解析的响应正文

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
    console.log(jqXHR.responseJSON);
})

【讨论】:

    【解决方案3】:

    一个简单的 jQuery 用法示例:

    var url = '/';
    $.get(url).then(
      function(response) {
          $("#result").html(response);
      },
      function(jqXHR) {
        $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status);
      }
    ); 
    

    这应该返回当前网站首页的 HTML。

    然后尝试输入一个不存在的无意义 URL 并查看引发的错误。 您应该从 Web 服务器获得“404 Not Found”。测试一下:JSFiddle here

    【讨论】:

      【解决方案4】:

      有一个隐藏函数可以从 XHR istance 中提取数据:

      var responseText = $.httpData(xhr)
      

      如果您将 "json" 作为第二个参数传递,它会将响应视为 JSON 字符串。

      请注意,由于没有响应(例如网络问题),您可能会收到错误消息。确保你也覆盖了那个案例。另外,我相信(不确定)如果服务器返回4xx5xx 状态,jQuery 会调用error 处理程序。

      【讨论】:

      • 谢谢。从源代码来看,xhr.responseText 似乎适用于常规 HTML 数据
      • 看起来$.httpData 函数至少从 jQuery 1.5.2 开始就消失了。
      • −1 用于使用未记录的功能。
      • 此回复已过时。 jQuery API 中暂时没有这样的方法
      猜你喜欢
      • 2016-03-07
      • 2012-05-10
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 2010-12-10
      • 2019-05-26
      相关资源
      最近更新 更多