【问题标题】:jQuery $.get/$.ajax passes HTTP status code 200 instead of expected status code of 201 or 202jQuery $.get/$.ajax 传递 HTTP 状态码 200 而不是预期的状态码 201 或 202
【发布时间】:2011-10-28 16:00:23
【问题描述】:

我有一个服务器,它从同一个 url 返回 HTTP 状态代码 200、201 和 202。在 Chrome 中,我已通过网络调试面板确认状态代码是我所期望的(即 200、201 或 202)。我依靠该状态码来确定下一步。

我希望 jQuery(版本 1.5.2)AJAX 的回调请求将 jqxhr.status 设置为服务器发送的状态代码。但是状态码始终是 200,即使服务器发送的代码是 201 或 202。

换句话说,无论服务器发送什么,以下代码都会打印Code: 200

$.get(url, {}, function (data, textStatus, xhr ) {
    alert("Code: " + xhr.status);
});

为什么会发生这种情况,更重要的是,如何在 jQuery AJAX 回调中为 $.get$.ajax 获取实际状态代码?

感谢您的阅读。

【问题讨论】:

  • 您是否有可能使用 JSONP 或跨域 GET 请求?
  • 也许这会有所帮助:bugs.jquery.com/ticket/8211
  • KrisIvanov:没有 JSONP 或跨域。这是通常的请求。
  • 查看this bug report 看看是否相关;想知道如果您使用 $.ajax 并在代码处理程序中报告状态和成功会发生什么。
  • Bug 8211 似乎只是切线相关 - 即 jQuery 不能正确处理 statusCodesuccess 处理程序。这似乎是状态码的一个奇怪的截断 - 我认为会有一些迹象,例如github.com/jquery/jquery/blob/master/src/ajax.js,但我没有看到任何明显将 jqXHR.status 从 201/202 更改为 200 的东西。

标签: ajax http jquery


【解决方案1】:

从我的经验来看,jQuery 并没有很好地处理响应中的实际状态代码。您可以尝试使用一些不错的老式裸机 JS 进行手动 AJAX 调用,然后自己处理状态。

这里有一些关于如何做到这一点的教程。

http://www.degraeve.com/reference/simple-ajax-example.php

http://www.w3schools.com/ajax/default.asp

request.status 是您应该能够访问请求对象中的状态代码的地方。这是另一个页面,展示了有关如何访问有关请求状态的更详细信息的一些信息。

http://www.ibm.com/developerworks/web/library/wa-ajaxintro3/

希望对你有所帮助!

【讨论】:

  • Thumallen 是对的,要么全有,要么全无。通过 jquery ajax 捕获重定向是不愉快的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2019-08-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多