jQuery $.get/$.ajax传递的HTTP状态码为200,而非预期的201或202状态码。

11

我有一个服务器,它从同一个URL返回HTTP状态码200、201和202。在Chrome中,通过网络调试面板我确认状态码是我期望的(例如200、201或202)。我依赖这个状态码来确定下一步操作。

我期望jQuery(版本1.5.2) AJAX请求的回调将jqxhr.status设置为服务器发送的状态码。然而,无论服务器发送的代码是201还是202,状态码始终为200。

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

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

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

感谢阅读。


你有没有使用JSONP或跨域的GET请求的机会? - Kris Ivanov
也许这会有所帮助:http://bugs.jquery.com/ticket/8211 - Scoobler
KrisIvanov:没有使用JSONP或跨域。这只是普通请求。 - Brian M. Hunt
查看此错误报告,看看是否相关;想知道如果在代码处理程序和成功处理程序中使用$.ajax并报告状态会发生什么。 - Dave Newton
Bug 8211似乎只是间接相关 - 即jQuery不能正确处理statusCodesuccess处理程序。这似乎是状态码的奇怪截断 - 我认为在例如https://github.com/jquery/jquery/blob/master/src/ajax.js中会有一些指示,但我没有看到任何明显将`jqXHR.status`从201/202更改为200的内容。 - Brian M. Hunt
1个回答

2
根据我的经验,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捕获重定向是不愉快的。 - Mikhail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接