使用延迟对象获取异步请求的请求参数

Getting Request Parameter for Asynchronous Requests with Deferred Objects

我正在发送异步 HTTP 请求并收集结果。在知道我要寻找什么之后,这缝起来有点容易。

现在我遇到了问题,我必须将请求的结果与请求的某些部分相关联,我需要在 $.when-回调中,我该怎么做?

var requests = [];
for (var i in uris) {
    requests.push($.get(endpoint, {graph: uri}));
}

$.when.apply($, requests).done(function () {
    var result = "";

    for (i in arguments) {
        result += therequesturi: + ": (" + arguments[i][0] + ")";
    }

});

therequesturi 应该是 uri 的占位符,我用它来检索数据。

如果我理解你的问题,你可能需要这样的东西:

var requests = [];
var results = [];

$.each(uris, function(index, uri) {
  requests.push($.get(endpoint, {graph: uri}).success(function (response) {
    results[index] = response;
  }));
});

$.when.apply($, requests).done(function () {
  var result = '';

  $.each(results, function(index, r) {
    result += therequesturi + ': (' + r[0] + ')';
  }
});

uris数组、requests数组和done回调的arguments都保证是一致的。

因此您可以简单地索引到原始 uris 数组。

这是我的做法:

var requests = uris.map(function(uri) {
    return $.get(endpoint, {graph: uri});
});

$.when.apply($, requests).done(function() {
    var args = Array.prototype.slice.call(arguments);//convert arguments object to proper array.
    var result = args.map(function(res, i) {
        return uris[i] + ": (" + res[0] + ")"; // because of congruity, indexes correspond with each other.
    }).join('');
});