【问题标题】:getting the error response from an ajax request in jquery从 jquery 中的 ajax 请求中获取错误响应
【发布时间】:2011-04-27 01:54:32
【问题描述】:

无论如何,我的网络服务器都会对任何 ajax 请求返回一个 json 响应。如果响应成功,则返回状态码为 200 的 json。如果出现问题,它将返回状态码为 400 或 500 的 json。我需要获取该信息,即使请求是 400 或 500,因为 json 响应带有错误消息,需要呈现给用户。

问题在于如果状态码不是 200,jquery $.ajax 函数不会让您访问响应对象,对吗?有没有办法做到这一点?

【问题讨论】:

  • 如果您返回带有错误消息的 JSON,则应返回 http 状态 200,这意味着 http 请求成功但发生了业务错误。

标签: jquery ajax


【解决方案1】:

您可以轻松检索它:

$.ajax({
    // your options
    success: function(data, xhr) {
      alert(xhr.status);
    }
});

【讨论】:

  • success 在状态码不是 200 时不会被调用。
  • 嗯,我应该说不,其他状态被认为是成功的,请参阅:// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol === "file:" || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 || xhr.status === 1223;
【解决方案2】:

您可以覆盖内部用于确定请求是否成功的jQuery.httpSuccess method,例如:

jQuery.httpSuccess = function() { return true; }

这将使您的 success 处理程序即使在 400/500 范围内的状态代码上也能执行。

注意:以后可能会更改为jQuery.ajax.httpSuccess

【讨论】:

    【解决方案3】:

    当然可以。 success 函数仅在调用成功时调用,但在出现错误时调用 error 回调 - 包括 HTTP 状态不是 200。

    $.ajax({..., error: function(XMLHttpRequest, textStatus, errorThrown) { ... } });
    

    【讨论】:

    • 这不一样,因为这里没有他在success 中的 JSON 对象。
    • 哦。非常正确。我误读了这个问题。我同意 klausbyskov 的观点,即在服务器仍然可以生成有效 JSON 响应的情况下返回非 200 HTTP 状态代码的想法有点令人不安。
    • @VoteyDicipline,那么正确的方法是什么?用户尝试触发 ajax POST 请求,但请求包含无效数据,响应代码不应为 200,对吗?在 json 中某处返回带有“错误”的 200 响应似乎更错误,IMO。
    • HTTP 状态描述了服务器是否能够处理 HTTP 请求。如果您的服务器获取数据、查看数据并返回结果,那就是200。为了比较,考虑一下如果你用谷歌搜索“khjafhkagjf ahkfgahjkgdf”会发生什么——这是一个完全无效的查询,但谷歌仍然可以接收它,理解它是无效的,并返回一个结果——你得到的页面是200。这与访问 www.google.com/404 的服务器可能无法满足您的请求不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2018-11-15
    • 2021-02-07
    相关资源
    最近更新 更多