成功回调选项的替代构造,.done()方法替换了已弃用的jqXHR.success()方法

时间:2013-11-20 15:22:11

标签: jquery ajax

我对jQuery documentation中的措辞感到困惑:

  

jqXHR.done(function(data,textStatus,jqXHR){});

     

成功回调选项的替代构造,.done()   方法替换已弃用的jqXHR.success()方法。参考   deferred.done()用于实现细节。

我对jqXHR.success并不感到困惑 - 显然已经弃用了。 但是因为jqXHR.done()是“替代构造”,作者是说使用.done还是“成功回调选项”?

编辑:

也许作者说.done方法是一种替代方法,因为它为您提供了比成功回调更多的功能。

1 个答案:

答案 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);
    });
});

现在它只会在第一次点击时转到服务器,之后它将使用现有数据。