2012-04-04 50 views
13

我有一個鏈接調度一個Ajax POST來執行一個操作。如果用戶尚未登錄,則操作方法將返回302重定向到登錄頁面。如果發生這種情況,我想捕獲重定向,以便我可以在lightbox中顯示登錄表單。如何防止jQuery ajax在發佈後重定向?

但是,似乎jQuery遵循重定向而不返回控制權或調用回調函數。在下面的代碼中,從不會調用302重定向警報,並且在調用dataFiler函數時,數據就是登錄頁面的內容。

我怎樣才能看到頁面發送了302重定向,並分支到不同的動作?

$.ajax(url, 
     { 
      data: postArguments, 
      type : "POST", 
      success: function (data) { alert(' success function'); }, 
      statusCode: 
      { 
       302: function() { alert(' received redirect 302'); }, 
       301: function() { alert(' received redirect 301'); } 
      }, 
      dataFilter: function (data, type) { alert('got data ' + data); return data; } 
     }); 

回答

11

這不是jQuery的限制,而是使用JavaScript本身;沒有辦法在JavaScript中檢測到AJAX請求中的重定向;瀏覽器的XHR對象自動魔術般地按照the spec不可見地遵循重定向。

理想的選擇是在您的服務器代碼中添加一個捕獲到detect an AJAX request(「HTTP_X_REQUESTED_WITH」頭),並返回一個特殊的響應來檢測JavaScript中的匿名用戶並進行適當的處​​理。