jQuery $.post延迟对象

3
我该如何在jQuery的$.post中使用延迟对象?我尝试了以下代码:
var myFunc = function(data, textStatus, jqXHR) {
    console.log(data);
};
var post = $.post("/url/", someData);
$.when(post).done(myFunc);

通常情况下

$.post("/url/", someData, function(data) { myFunc(data) });

修改了myFunc的签名后,它可以正常工作。

$.when...无法正常工作,也没有错误提示失败。那么.done()函数究竟传递了什么给myFunc

1个回答

6
jQuery ajax函数返回一个jqXHR,它本身是一个延迟对象(实现了Promise接口)。因此不需要使用$.when()

对于myFunc,也没有必要使用命名函数表达式,普通的函数声明即可。

function func1(data, textStatus, jqXHR) {
    console.log('success', data);
}

function func2(jqXHR, textStatus) {
    console.log('done', textStatus);
}

$.post('/url/', someData).success(func1).done(func2);

演示:http://jsfiddle.net/mattball/ng7zT/


.done() 函数到底传递给 myFunc 什么参数?

这在上面的 jqXHR 链接和 $.post 中有详细记录。

成功的回调函数将被传递返回的数据,这将是一个 XML 根元素或一个文本字符串,具体取决于响应的 MIME 类型。它还会传递响应的文本状态。

自 jQuery 1.5 版本以来,成功的回调函数还会传递一个 "jqXHR" 对象(在 jQuery 1.4 中,它传递的是 XMLHttpRequest 对象)。


不需要使用 $.when,但也不会有任何影响。 - Tgr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接