gpt4 book ai didi

ajax - 如何获取 jQuery.ajax 响应状态?

转载 作者:行者123 更新时间:2023-12-03 22:28:07 27 4
gpt4 key购买 nike

有什么方法可以知道返回的 jqXHR 对象是否是从另一个请求重定向的?例如,有以下代码:

   jQuery.ajax({
type: 'POST',
url: 'http://example.com/page.html',
complete: function(response, status) {
console.log(response.statusCode);
// do something
}
});

如果使用 301 或 302 状态代码重定向 ajax url,则响应将是重定向页面的结果,并将返回 200(OK)状态代码。我认为这是 jQuery 的错误(真的不知道这是否是预期的行为,因为最终的响应实际上是成功的)我无法获取原始响应 header 来检查是否存在位置 header ,因为这仅适用于重定向请求。

使用上述代码的 Firebug 通过 XHR 记录这两个请求

http://example.com/page.html 302(暂时移动) http://example.com/redirect.html 200(好的)

但是 jQuery 只返回第二个请求的数据。

也许有办法从第一个请求中获取数据?或者获取响应 url 并将其与原始请求中的响应 url 进行比较?

最佳答案

问题在于,由于标准合规性,301 或 302 由浏览器直接处理。此状态代码不会传递到您的 ajax 调用。您知道调用已完成的唯一方法是在完整处理程序中,此外,传递给完成的 jqxhr 对象中没有给出有用的状态。成功和错误处理程序永远不会被调用。

我们有一些遗留的 ruby​​ 露营代码,在调用 post() 方法时使用重定向到 get() 方法,以便我们可以通过资源的 ruby​​ 显示更新的 View 。当我们从露营 View 切换到 JavaScript View 时,301/302 没有传递给 jqxhr 对象。我们必须重写 post 方法以返回 200 才能解决该问题。

这里有一些有关该主题的 stackoverflow 帖子。

How to manage a redirect request after a jQuery Ajax call

Catching 302 FOUND in JavaScript

HTTP redirect: 301 (permanent) vs. 302 (temporary)

关于ajax - 如何获取 jQuery.ajax 响应状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6906995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com