2011-08-02 100 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)