2013-04-29 97 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回调(这恰好包含此属性)作为上下文。