1、解释

deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。

2、ajax链式写法

$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。

$.ajax("test.html")
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });


指定同一操作的多个回调函数

$.ajax("test.html")
  .done(function(){ alert("哈哈,成功了!");} )
  .fail(function(){ alert("出错啦!"); } )
  .done(function(){ alert("第二个回调函数!");} );


回调函数可以添加任意多个,它们按照添加顺序执行。

3、 $.when() 为多个操作指定回调函数。

4、deferred.then()

done()和fail()合在一起写,这就是then()方法。

$.when($.ajax( "/main.php" ))
  .then(successFunc, failureFunc );


5、deferred.always()

不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。

那么到底为什么要用链式操作呢?

为了更好的异步体验