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 相关文章推荐
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
JS前向后瞻正则表达式定义与用法示例
Dec 27 Javascript
Node.js中如何合并两个复杂对象详解
Dec 31 Javascript
详解网站中图片日常使用以及优化手法
Jan 09 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 28 Javascript
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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
php加密解密实用类分享
2014/01/07 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python处理二进制数据的方法
2015/06/03 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
基于python检查矩阵计算结果
2020/05/21 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
员工薪酬福利制度
2014/01/17 职场文书
数学系个人求职信范文
2014/01/30 职场文书
春节联欢会策划方案
2014/05/16 职场文书
优秀家长自荐材料
2014/08/26 职场文书
2014年测量员工作总结
2014/12/12 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
Pandas加速代码之避免使用for循环
2021/05/30 Python
讲解MySQL增删改操作
2022/05/06 MySQL