JQuery documentation for getJSON显示了一个示例:
var jqxhr = $.getJSON( "example.json", function() {
console.log( "success" );
})
.done(function() {
console.log( "second success" );
})
.fail(function() {
console.log( "error" );
})
.always(function() {
console.log( "complete" );
});
成功函数(作为第二个参数传递)与done()函数之间的区别是什么?他们似乎是一回事。
答案 0 :(得分:12)
最初,jQuery异步函数没有返回promise,你必须使用回调。
然后他们添加了延迟(promise)系统,但保留了回调以保持兼容性(因为不是每个人都喜欢延迟)。
来自the Deferred object documentation:
在JavaScript中,通常会调用可选择接受的函数 在该函数中调用的回调。例如, in jQuery 1.5之前的版本,异步流程如 jQuery.ajax()接受在一段时间内调用的回调 成功,错误和完成ajax请求时的近期未来。
jQuery.Deferred()引入了回调方式的几个增强功能 管理和调用。特别是,jQuery.Deferred()提供了 灵活的方式提供多个回调,这些回调可以 无论原始回调调度是否具有,都可以调用 已经发生了。 jQuery Deferred基于CommonJS Promises / A. 设计。
答案 1 :(得分:4)
他们是一回事。 done函数意味着像Promise那样工作。这样你就可以从ajax调用的结果中安装处理程序。如果在异步调用完成后调用done(通过存储返回值)
,它甚至可以工作