如何获取 jQuery.ajax 响应状态?
Posted
技术标签:
【中文标题】如何获取 jQuery.ajax 响应状态?【英文标题】:How to get jQuery.ajax response status? 【发布时间】:2011-10-17 22:21:22 【问题描述】:有什么方法可以知道返回的 jqXHR 对象是否是从另一个请求重定向的?例如,具有以下代码:
jQuery.ajax(
type: 'POST',
url: 'http://example.com/page.html',
complete: function(response, status)
console.log(response.statusCode);
// do something
);
如果 ajax url 使用 301 或 302 状态码重定向,则响应将是重定向页面的结果,并将返回 200(OK)状态码。我认为这是一个 jQuery 的错误(不知道这是否是预期的行为,因为最终的响应实际上是成功的) 我无法获取原始响应标头来检查是否存在位置标头,因为这仅适用于重定向请求。
使用上述代码的 Firebug 通过 XHR 记录这两个请求
http://example.com/page.html302(临时搬家) http://example.com/redirect.html200(正常)
但是 jQuery 只返回来自第二个请求的数据。
也许有办法从第一个请求中获取数据?或者获取响应 url 并将其与原始请求中的进行比较?
【问题讨论】:
【参考方案1】:问题在于,由于符合标准,301 或 302 由浏览器直接处理。此状态代码不会传递给您的 ajax 调用。您知道调用已完成的唯一方法是在完成处理程序中,而且在传递给完成的 jqxhr 对象中没有给出有用的状态。 Success 和 Error 处理程序永远不会被调用。
我们有一些遗留的 ruby 露营代码在调用 post() 方法时使用重定向到 get() 方法,以便我们可以通过资源的 ruby 显示更新的视图。当我们从露营视图切换到 javascript 视图时,301/302 没有传递给 jqxhr 对象。我们不得不重写 post 方法以返回 200 来解决问题。
这里有一些关于这个主题的 *** 帖子。
How to manage a redirect request after a jQuery Ajax call
Catching 302 FOUND in JavaScript
HTTP redirect: 301 (permanent) vs. 302 (temporary)
【讨论】:
【参考方案2】:我发现可能有帮助的一个工具是wireshark。它是免费的,并且可能能够找出 jqXHR 对象发生了什么。它相当容易使用,但请遵循以下说明:
http://www.wireshark.org/ Wireshark 是适用于 Unix 和 Windows 的网络协议分析器。到目前为止,我只使用了这个工具,但它在分析你的机器和网络上其他人之间的请求时会派上用场。
开始之前 - Wireshark 捕获每个请求,因此只有在准备好捕获时单击开始,完成后单击停止。 - 你需要你的 IP 地址
阅读更多关于analysing HTTP requests
【讨论】:
以上是关于如何获取 jQuery.ajax 响应状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 REST API 获取响应并从 jquery ajax 调用执行操作?