2013-04-29 130 views
1

我正在使用Ajax請求從我的服務器獲取數據。我得到的數據來自幾個地方(網址)。我需要一種方法來區分來自一個網址的數據和來自另一個網址的數據。 請求是這樣的:請求信息在ajax完成回調

function initRequest(url) 
    var request = $.ajax({ 
      url: url, 
      contentType: 'application/json', 
      dataType: 'json', 
      type: "GET" 
     }); 

     request.done(function(msg) { 
      //i need to know what was the url of this request 
      //request.url is undefined 
     } 
} 

我該怎麼做? 我提到我不能使用數據本身(msg)來了解源URL。

+0

你的'url'參數的值應該仍然在傳遞給'done'的回調函數的範圍內,所以你可以嘗試使用它? – 2013-04-29 12:42:31

+0

如果在調用'done'之前發出多個調用,那麼url會有不同的值 – 2013-04-29 12:43:07

+0

@GeenHenk呃,不,考慮到每個調用將使用一個不同的'jqXhr'對象,該對象在對該函數的單獨調用中被初始化。 – 2013-04-29 12:44:18

回答

1

因爲你不能修改返回的JSON,使用回調內部的Ajax對象的網址:

.done(function(msg) { 
    var url = this.url; 
}); 
+0

我不能這樣做。服務器不是我的,我只是用它。我需要request.done來獲取請求url。 – 2013-04-29 12:41:23

+0

哦,現在更有意義了..最好在你的問題中包含這些信息。我沒有得到你的信息 – 2013-04-29 12:42:21

+0

感謝隊友。這是獲取該信息的方式。我已經將你的答案標記爲我的問題的解決方案,但請將其編輯爲明確 - 也許其他具有相同問題的其他人將閱讀此問題。從你的答案中刪除服務器部分。再次感謝。 – 2013-04-29 12:52:48

1

可以使用可變url的完成回調裏面,因爲它是可變

封閉
function initRequest(url) 
    var request = $.ajax({ 
      url: url, 
      contentType: 'application/json', 
      dataType: 'json', 
      type: "GET" 
     }); 

     request.done(function(msg, status, xhr) { 
      //you can use url here because it is a closure function 
      alert(url) 
     } 
} 
1

如果.done函數在initRequest的詞彙範圍內,則直接訪問url參數 - 它仍在範圍內。

否則,只要你沒有在$.ajax呼叫提供備用context設置你可以訪問this.url.done回調 - 默認調用的jQuery與AJAX對象的所有AJAX回調(這恰好包含此屬性)作爲上下文。