我对jQuery documentation中的措辞感到困惑:
jqXHR.done(function(data,textStatus,jqXHR){});
成功回调选项的替代构造,.done() 方法替换已弃用的jqXHR.success()方法。参考 deferred.done()用于实现细节。
我对jqXHR.success并不感到困惑 - 显然已经弃用了。 但是因为jqXHR.done()是“替代构造”,作者是说使用.done还是“成功回调选项”?
编辑:
也许作者说.done方法是一种替代方法,因为它为您提供了比成功回调更多的功能。
答案 0 :(得分:2)
jqXHR.done是成功回调 选项 的替代方法,例如,
$.ajax("foo.php",{
success: successHandler
})
$.ajax(...).success()
当然已被弃用。
并不是说你应该使用.done而不是成功的回调选项,它只是指出它是一个有效的选择。使用代码中有意义的内容。如果需要,您可以使用两者,成功回调选项将首先被绑定,因此它将首先被触发。
使用.done和success之间的主要区别在于:.done()可以在发送/接收请求后应用于jqXHR。例如,
var request = $.ajax(...);
request.done(function(){
console.log("It's done!");
});
function doSomething () {
request.done(function(result){
console.log(result);
})
}
$("#someel").click(doSomething);
现在,每次单击#someel
时,它都会调度ajax请求的结果,而不必担心它是否已完成。
或许,您可能希望获得一些内容,但不是每次点击都转到服务器,只需使用现有数据。
$("#someel").click(function(e){
e.preventDefault();
var $this = $(this);
if (!$this.data("request")) {
$this.data("request",$.ajax(...));
}
$this.data("request").done(function(result){
console.log(result);
});
});
现在它只会在第一次点击时转到服务器,之后它将使用现有数据。