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

Dav*_*len 14 jquery getjson

getJSONJQuery文档显示了一个示例:

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" );
  });
Run Code Online (Sandbox Code Playgroud)

成功函数(作为第二个参数传递)与done()函数之间的区别是什么?他们似乎是一回事.

Den*_*ret 13

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

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

Deferred对象文档:

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

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