为什么JQuery.getJSON()有成功和完成function?

getJSON的JQuery文档显示了一个示例:

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()函数之间有什么区别? 他们似乎是一回事。

最初,jQuery异步函数没有返回promise,你必须使用回调。

然后他们添加了延迟(promise)系统但保留了兼容性的回调(并且因为不是每个人都喜欢延迟)。

从Deferred对象文档 :

在JavaScript中,通常调用可选地接受在该函数内调用的回调的函数。 例如, jQuery 1.5之前的版本中 ,异步流程(如jQuery.ajax())接受在ajax请求成功,错误和完成时在不久的将来调用的回调。

jQuery.Deferred()引入了对回调管理和调用方式的几种增强。 特别是,jQuery.Deferred()提供了提供多个回调的灵活方法,无论原始回调调度是否已经发生,都可以调用这些回调。 jQuery Deferred基于CommonJS Promises / A设计。

他们是一样的东西。 done函数意味着像Promise一样工作,这样你就可以从ajax调用的结果中安装处理程序。 如果在异步调用完成后调用done(通过存储返回值),它甚至可以工作