jquery deferred对象

本篇博文是对阮一峰的一篇日志的归纳

1
var func1 = function() { 2 $.ajax("/echo/json")//jquery1.5以后返回deferred对象, 1.5以前返回XHR对象, 无法使用链式操作 3 .done(function(){//相当于success方法 4 alert("success!"); 5 }) 6 .fail(function(){//相当于error方法 7 alert("fail!"); 8 }) 9 .done(function(){//可以指定多个回调函数 10 alert("done again"); 11 }) 12 .fail(function(){ 13 alert("fail again"); 14 }) 15 .always(function(){//相当于complete方法 16 alert("always!"); 17 }); 18 } 19 20 var func2 = function() { 21 var def = $.Deferred(); 22 var wait = function(){ 23 var task = function() { 24 alert("task done"); 25 def.resolve(); 26 } 27 setTimeout(task, 3000); 28 /*返回promise对象,这样就无法再wait方法外修改deferred对象的状态*/ 29 return def.promise(); 30 } 31 32 var d = wait(); 33 $.when(d) 34 .done(function(){ 35 alert("done"); 36 }); 37 //d.reject();//语句无效,因为promise对象无修改deferred对象状态的方法 38 } 39 40 var func3 = function(){ 41 var wait = function() { 42 //将deferred对象设置为wait方法的内部对象更保险 43 var def = $.Deferred();//deferred对象状态:未完成 44 var task = function(){ 45 alert("task done"); 46 def.resolve();//状态:已完成, 会触发done方法 47 //def.reject();//状态:已失败, 会触发fail方法 48 } 49 setTimeout(task, 3000); 50 return def; 51 } 52 53 $.when(wait())//when方法要求接受一个deferred对象 54 .done(function(){ 55 alert("done"); 56 }); 57 } 58 59 var func4 = function(){ 60 //将done和fail方法合并 61 $.when($.ajax("/echo/json")) 62 .then(function(){ 63 alert("done"); 64 }, function(){ 65 alert("fail"); 66 }); 67 } 68 69 var func5 = function(){ 70 var d = $.Deferred(); 71 var task = function(){ 72 alert("do something"); 73 } 74 d.progress(task);//注册事件 75 d.notify();//触发progress注册的事件 76 }

 

posted @ 2013-03-05 11:54  堂哥  阅读(167)  评论(0编辑  收藏  举报