以下回调方法之间是否存在任何技术差异?
1
$.ajax({
...
success: function(data, textStatus, jqXHR) {
foo(data);
},
error: function (jqXHR, textStatus, errorThrown ) {
bar();
}
});
2
$.ajax(...)
.done(function(data) {
foo(data);
})
.fail(function() {
bar();
});
3
$.ajax(...)
.then(function(data) {
foo(data);
}, function() {
bar();
});
由于经验不足,我不确定它们是将data
传递给foo()
的正确示例。 (如果我错了,请纠正我。)
使用done
/ fail
,我们无法跟踪其他数据,例如jqXHR
,textStatus
,errorThrown
等。我是对的吗?
complete
/ done
方法是否有fail
等值?
根据您的经验,在某些情况下,是否比其他人更优先/更优先?
如果我同时使用success
和done
/ then
,那么一个会在另一个之前运行,或者无法确定哪个会在另一个之前运行吗?或者完全不推荐使用success
和done
/ then
?
提前谢谢大家。
答案 0 :(得分: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>
&#13;
$.Deferred(function(dfd) {
dfd.resolve(1)
})
.then(function(n) {
return n + 1
})
.then(function(res) {
console.log(res) // 2
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
&#13;