2017-03-17 140 views
1

以下回調方法之間是否存在技術差異?jQuery Deferred完成vs成功回調

$.ajax({ 
    ... 
    success: function(data, textStatus, jqXHR) { 
    foo(data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
    bar(); 
    } 
}); 
$.ajax(...) 
    .done(function(data) { 
    foo(data); 
    }) 
    .fail(function() { 
    bar(); 
    }); 
$.ajax(...) 
    .then(function(data) { 
    foo(data); 
    }, function() { 
    bar(); 
    }); 

經驗少,我不知道他們是通過datafoo()正確的例子。 (如果我錯了,請大家指正。)

隨着done/fail,我們無法跟蹤像jqXHRtextStatuserrorThrown,等我說的對其他數據?

done/fail方法是否有complete等效?

從你的經驗來看,在某些情況下比其他人更好/更優於其他人嗎?

如果我同時使用successdone/then,將之前對方肯定一分也不能將先於另一個絕對運行某些?或者正在使用successdone/then完全不推薦?

謝謝大家提前。

+1

[jQuery.ajax處理繼續響應:「success:」vs「.done」?]可能重複(http://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success- vs-done) – gyre

+3

'.then()'爲鏈接返回一個新的承諾。 '.done()'不。 '.then()'更接近承諾標準(在JQ 3.0中它實際上是標準的,在以前的版本中並不完全)。 '.done()'完全是一個jQuery特定的設計,不受任何承諾標準的約束。 – jfriend00

回答

1

一個jQuery的.done().then()之間差的返回值可以在.then()

改變參見jQuery deferreds and promises - .then() vs .done()

$.Deferred(function(dfd) { 
 
    dfd.resolve(1) 
 
}) 
 
.done(function(n) { 
 
    return n + 1 
 
}) 
 
.then(function(res) { 
 
    console.log(res) // 1 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script>

$.Deferred(function(dfd) { 
 
    dfd.resolve(1) 
 
}) 
 
.then(function(n) { 
 
    return n + 1 
 
}) 
 
.then(function(res) { 
 
    console.log(res) // 2 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script>