【问题标题】:request info in ajax done callbackajax 完成回调中的请求信息
【发布时间】:2013-04-29 21:10:48
【问题描述】:

我正在使用 Ajax 请求从我的服务器获取数据。我得到的数据来自几个地方(网址)。我需要一种方法来区分来自一个 url 的数据和来自另一个 url 的数据。 请求是这样的:

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。

【问题讨论】:

  • 您的url 参数值应该仍然在传递给done 的回调范围内,所以您可以尝试使用它吗?
  • 如果在调用done之前进行了多次调用,则url具有不同的值
  • @GeenHenk 呃,不,考虑到每个调用都将使用在对该函数的单独调用中初始化的不同 jqXhr 对象。
  • @GeenHenk 不,因为url 是一个函数参数,每次调用都将作用域绑定到传递的值,而不是“当前”值。
  • 这个.done函数是否保证在initRequest的词法范围内?

标签: jquery ajax


【解决方案1】:

由于不能修改返回的JSON,所以在回调中使用ajax对象的url:

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

【讨论】:

  • 我不能这样做。服务器不是我的,我只是用它。我需要在 request.done 上获取请求 url。
  • 哦,现在这更有意义了。最好在您的问题中包含该信息。我没有从你的信息中得到这个
  • 谢谢伙计。这是获取该信息的方法。我已经将您的答案标记为我的问题的解决方案,但请对其进行编辑以明确 - 也许其他有相同问题的人会阅读此问题。只需从您的答案中删除服务器部分。再次感谢。
  • this questionurl 属性在回调中可用。
  • 啊,好的,好地方。请注意,这只有效,因为 AJAX 对象是 .done 调用的默认 this 上下文,除非您在 $.ajax() 设置中提供了备用。
【解决方案2】:

你可以在 done 回调中使用变量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)
        }
}

【讨论】:

    【解决方案3】:

    如果.done 函数在initRequest 的词法范围内,只需直接访问url 参数 - 它仍在范围内。

    否则,只要您没有在 $.ajax 调用中提供备用的 context 设置,您就可以在 .done 回调中访问 this.url - 默认情况下,jQuery 使用 AJAX 对象调用所有 AJAX 回调(恰好包含此属性)作为上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多