2011-08-02 64 views
9

有什么方法可以知道返回的jqXHR对象是否从另一个请求重定向?例如,具有以下代码:如何获取jQuery.ajax响应状态?

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的错误(不知道这是否是预期的问题,因为最终的响应实际上是成功的) 我不能得到原始响应头来检查是否存在位置头,因为这仅在重定向的请求中可用。

萤火虫与上面的代码记录通过XHR

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

但是jQuery的仅从第二请求返回数据这两个请求。

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

回答

0

我发现可能有帮助的工具是wireshark。它是免费的,可能能够找出jqXHR对象正在发生的事情。使用非常简单,但请遵循以下说明:

http://www.wireshark.org/ Wireshark是一个用于Unix和Windows的网络协议分析器。迄今为止,我只用这个工具对表面进行了刷新,但在对您的机器与网络上的其他机器之间的请求执行分析时,它非常方便。

开始之前 - Wireshark捕获每个请求,所以只需在准备好捕获时单击开始并在完成时单击停止。 - 你需要你的IP地址

了解更多关于analysing HTTP requests

2

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

我们有一些遗留的ruby露营代码,当post()方法被调用时使用重定向到get()方法,以便我们可以通过资源的ruby显示更新的视图。当我们从野营视图切换到JavaScript视图时,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)