1

有关 Deferreds 的 jQuery 文档中,有一个返回 ajax args 的示例,包括 jqXHR:

$.when( $.ajax("test.php") ).then(function(ajaxArgs){ 
    alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});

但似乎文档是错误的。ajaxArgs实际上是$.ajax呼叫的响应。

我需要访问 jqXHR 对象,因为我需要一些关于实际调用的元数据,但它似乎很老套。这就是我目前正在做的事情,但必须有更好的方法(交叉手指)。

xhr = $.ajax({
    'url': src,
}).done(function () {
    var meta = xhr.getResponseHeader(...);
});

访问我需要的 jqXHR 数据的最佳/最简单方法是什么?

4

1 回答 1

2

使用第三个参数:

.then(function(text,status,xhr) {
   var meta = xhr.getResponseHeader(...);
});

但是请注意,如果您将多个延迟传递给$.when,它将是第一个参数的第三个索引,第二个或第三个索引,具体取决于您想要标头的请求。

$.when( $.ajax("test.php"),$.ajax("test.php"),$.ajax("test.php") ).then(function(){ 
    var meta1 = arguments[0][2].getResponseHeader(...);
    var meta2 = arguments[1][2].getResponseHeader(...);
    var meta3 = arguments[2][2].getResponseHeader(...);
});
于 2012-05-30T21:57:40.880 回答