Jquery $when done then的用法详解


Posted in Javascript onMay 20, 2016

对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when...done...fail...then的封装,它将$.ajax这嵌套结构转成了顺序平行的结果,向下面的$.ajax写法,看起来很乱

$.ajax({
url: "/home/GetProduct",
dataType: "JSON",
type: "GET",
success: function (data) {
$.ajax({
url: "/home/GetProduct",
dataType: "JSON",
type: "GET",
success: function (data) {
$.ajax({
url: "/home/GetProduct",
dataType: "JSON",
type: "GET",
success: function (data) {
}
}
}

而它实现的功能无非就是外层执行完成后,去执行内层的代码代码,看下面的$.when写法,就清晰多了

$.when($.ajax({
url: "/home/GetProduct",
dataType: "JSON",
type: "GET",
success: function (data) {
alert(JSON.stringify(data));
}
})).done(function (data) {
alert(data[0].Name);
}).done(function (data) {
alert(data[1].Name);
}).fail(function () {
alert("程序出现错误!");
}).then(function (data) {
alert("程序执行完成");
});

而对于这种ajax的封装,在比较流行的node.js里也需要被看到,这就类似于方法的回调技术!

在使用MVVM的KO上,更加得心应手,感觉$.when就是为了Knockoutjs而产生的!

//MVVM数据绑定
var MyModel = new model();
$.when($.ajax({
url: "/home/GetProduct",
dataType: "JSON",
type: "GET",
success: function (data) {
MyModel.PeopleList = ko.observableArray(data);//先为对象赋值
}
})).done(function (data) {
ko.applyBindings(MyModel);//再绑定对象
});

以后我们在进行前端开发时,应该多使用这种顺序的,平行的代码段,而少用嵌套的代码段,这只是大叔个人的见解。

下面通过一个例子再给大家介绍jquery when then(done) 用法

//运行条件jquery 1.82以上,直接运行代码,看结果

var log = function(msg){ 
window.console && console.log(msg) 
} 
function asyncThing1(){ 
var dfd = $.Deferred(); 
setTimeout(function(){ 
log('asyncThing1 seems to be done...'); 
dfd.resolve('1111'); 
},1000); 
return dfd.promise(); 
} 
function asyncThing2(){ 
var dfd = $.Deferred(); 
setTimeout(function(){ 
log('asyncThing2 seems to be done...'); 
dfd.resolve('222'); 
},1500); 
return dfd.promise(); 
} 
function asyncThing3(){ 
var dfd = $.Deferred(); 
setTimeout(function(){ 
log('asyncThing3 seems to be done...'); 
dfd.resolve('333'); 
},2000); 
return dfd.promise(); 
} 
/* do it */ 
$.when( asyncThing1(), asyncThing2(), asyncThing3() ).done(function(res1, res2, res3){ 
log('all done!'); 
log(res1 + ', ' + res2 + ', ' + res3); 
})

以上所述是小编给大家介绍的Jquery $when done then的用法详解,希望对大家有所帮助,如果大家对此还有疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery 批量上传图片实现代码
Jan 28 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 Javascript
jQuery 实现评论等级好评差评特效
May 06 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
May 24 Javascript
JavaScript实现瀑布流图片效果
Jun 30 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
Vue父子传递实例讲解
Feb 14 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
jQuery添加和删除输入文本框标签代码
May 20 #Javascript
jQuery通过deferred对象管理ajax异步
May 20 #Javascript
Bootstrap3学习笔记(三)之表格
May 20 #Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 #Javascript
Bootstrap3学习笔记(二)之排版
May 20 #Javascript
js获取iframe中的window对象的实现方法
May 20 #Javascript
BootStrap3学习笔记(一)之网格系统
May 20 #Javascript
You might like
类的另类用法--数据的封装
2006/10/09 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
初学Javascript的一些总结
2008/11/03 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
Python正则表达式介绍
2012/08/06 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python制作Windows系统服务
2017/03/25 Python
基于Python log 的正确打开方式
2018/04/28 Python
pygame实现简易飞机大战
2018/09/11 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python绘制直方图和密度图的实例
2019/07/08 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
举例讲解Python装饰器
2020/12/24 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
2014年社区庆元旦活动方案
2014/03/08 职场文书
司法助理专业自荐书
2014/06/13 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
欢迎词范文
2015/01/27 职场文书
李白故里导游词
2015/02/12 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers