2012-07-13 28 views
6

我有一個jQuery的ajax statuscode函數來處理404 ...另一個堆棧溢出的答案指出,在成功的方法,this.url給出了請求的網址...但是,這似乎並不是這樣爲我的statusCode處理程序。有任何想法嗎?在文檔中我沒有看到如何獲取請求的URL。JQuery statusCode 404 - 如何獲取jqXhr url?

我的AJAX的選擇對象看起來大致是這樣的

;(function($) { 
    var defaultSettings = { 
    // ... other plugin specific settings 
    ajaxOptions: 
    { 
        cache:false, 
        context:$(this), 
        statusCode: { 
         404:function(xhr) { 

         // this line... this.url is always undefined (so is xhr.url) 
          $('#body').append('<div class="errordisplay">Content not found' + (this.url?': ' + this.url:'') + '</div>'); 

        // ... do other stuff 

          return false; 

         } 
        } 
      } 
} 
+0

你是否在'context'選項中傳遞了'$ .ajax()'? – 2012-07-13 09:00:49

+2

['this.url' should work](http://jsfiddle.net/jamesallardice/f3XTn/)。您可能需要發佈更多代碼。 – 2012-07-13 09:05:01

+0

這個ajaxOption對象是一個自定義jquery插件的默認選項,所以我有「上下文:$(this)」...問題代碼更詳細地更新 – Nathan 2012-07-13 09:05:21

回答

8

對AJAX事件處理程序,默認情況下(即對象綁定到this(修剪出的代碼對這個問題不相關時,可能已經錯過了關一支柱)在處理程序中)確實暴露了url屬性,因爲它是$.ajaxSettings與傳遞給$.ajax()的參數之間的混合。

但是,就您而言,您通過在context選項中傳遞$(this)來覆蓋該默認上下文。此外,在ajaxOptions中這樣做意味着使用當前URL擴展該對象並不容易。

我建議在AJAX調用之前使用data()或類似方法將URL與您的插件正在增強的元素相關聯。

30

你可以修改請求&設置與下面的代碼發送前的對象:

$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.url = settings.url; 
    } 
}); 

然後在statusCode回調訪問xhr.url。它應該工作。

+0

適用於我,並允許記錄該URL用於調試目的。 – 2013-10-15 10:13:21

+0

如果它重定向過程中? – Elaman 2014-12-14 08:02:01

+0

@Elaman瀏覽器處理透明重定向,所以它應該適用於301/302響應。 – janlay 2014-12-17 06:39:27