jQuery Deferred(http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html)
2015-08-26 17:39
756 查看
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.when</title> <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script> <script> function fn1(){ setTimeout(alert("fn1"),5000); } $.when(fn1()).done(function(){ alert("fn1执行完毕!") }).fail(function(){ alert("出错了!") }) </script> </head> <body> </body> </html>
但是,这样写的话,done()方法会立即执行,起不到回调函数的作用。原因在于$.when()的参数只能是deferred对象,所以必须对wait()进行改写:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.when</title> <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script> <script> /*function fn1(){ setTimeout(alert("fn1"),5000); } $.when(fn1()).done(function(){ alert("fn1执行完毕!") }).fail(function(){ alert("出错了!") })*/ var dtd = $.Deferred();//新建一个Deferred对象 var wait = function(dtd){ var test = function(){ alert("test执行完毕!"); // dtd.resolve();//改变deferred对象的状态 dtd.reject(); } setTimeout(test, 5000); return dtd; } $.when(wait(dtd)).done(function(){ alert("成功!") }).fail(function(){ alert("失败!") }) </script> </head> <body> </body> </html>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.when</title> <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script> <script> var wait = function(){ var dtd = $.Deferred();//新建一个Deferred对象 var test = function(){ alert("test执行完毕!"); dtd.resolve();//改变deferred对象的状态 // dtd.reject(); } setTimeout(test, 2000); return dtd.promise();//返回promise对象 } // var d = wait(dtd);//新建一个d对象,以为对这个对象进行操作 $.when(wait()).done(function(){ alert("成功!") }).fail(function(){ alert("失败!") }) // dtd.resolve(); // d.resolve();//promise对象不能resolve,这个语句无效 </script> </head> <body> </body> </html>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.when</title> <script src="http://the5fireblog.b0.upaiyun.com/staticfile/jquery-1.10.2.js"></script> <script> var wait = function(){ var test = function(){ alert("test执行完毕!"); } setTimeout(test, 2000); } $.Deferred(wait).done(function(){ alert("成功!") }).fail(function(){ alert("失败!") }) </script> </head> <body> </body> </html>
相关文章推荐
- Linux网络总结
- Android 解决HTTP请求中文乱码
- 【使用JSOUP实现网络爬虫】从元素抽取属性,文本和HTML
- httpclient4的使用
- http操作,模拟第三方接口回调通知
- Azure虚拟网络基于RFC1918的子网划分
- 【使用JSOUP实现网络爬虫】使用选择器语法来查找元素
- 【使用JSOUP实现网络爬虫】使用DOM方法来遍历一个文档
- 1.6 网络编程之 UDP通信
- iOS开发——网络篇——数据安全(MD5),HTTPS,检测网络状态
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- HTTP 1.1与HTTP 1.0的比较
- iOS开发——网络篇——UIWebview基本使用,NSInvocation(封装类),NSMethodSignature(签名),JavaScript,抛异常,消除警告
- 安装PHP过程中,make步骤报错:(集合网络上各种解决方法)
- XCode7 iOS9无法访问网络的问题
- [iOS]code=-1016等网络请求错误.
- Linux网络虚拟化
- (二) HTTP/2起步
- 解决Exception in thread "http-bio-8081-exec-9"Exception in thread "Druid-ConnectionPool-Create-3819
- 【使用JSOUP实现网络爬虫】解析一个body片断