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

时间:2014-04-14 16:57:51

标签: jquery getjson

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

2 个答案:

答案 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(通过存储返回值)

,它甚至可以工作