本文参考自:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object
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() 为多个操作指定回调函数。
done()和fail()合在一起写,这就是then()方法。
$.when($.ajax( "/main.php" ))
.then(successFunc, failureFunc );
不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
$.ajax( "test.html" ) .always( function() { alert("已执行!");} );
https://www.jb51.net/article/33342.htm
那么到底为什么要用链式操作呢?
为了更好的异步体验