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 相关文章推荐
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 Javascript
详细讲解JS节点知识
Jan 31 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
Oct 10 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
ES6新增数据结构WeakSet的用法详解
Aug 07 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 Javascript
详解JavaScript原型与原型链
Nov 16 Javascript
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
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
PHP下MAIL的另一解决方案
2006/10/09 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
axios拦截设置和错误处理方法
2018/03/05 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
python小技巧之批量抓取美女图片
2014/06/06 Python
Python多线程实例教程
2014/09/06 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
精彩广告词大全
2014/03/19 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
逃课检讨书
2015/01/26 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python