jQuery Deferreds& Ajax - 如何访问jqXHR对象?

时间:2012-05-30 21:53:06

标签: javascript jquery ajax jquery-deferred

jQuery docs regarding Deferreds中,有一个返回ajax args的例子,包括jqXHR:

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

但似乎文档是错误的。 ajaxArgs实际上是$.ajax来电的回复。

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

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

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

1 个答案:

答案 0 :(得分: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(...);
});