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

$.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数据的最佳/最简便方法是什么?

最佳答案

使用第三个参数:

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


但是请注意,如果将多个deferreds传递到$.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(...);
});

关于javascript - jQuery Deferreds和Ajax-如何访问jqXHR对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10824786/

10-12 12:52