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 相关文章推荐
js 纯数字不重复排列的另类方法
Jul 17 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
JavaScript 和 Java 的区别浅析
Jul 31 Javascript
js重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
Nov 15 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
vue框架搭建之axios使用教程
Jul 11 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
Sep 03 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
动态加载iframe
2006/06/16 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
Javascript倒计时代码
2010/08/12 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
深入讲解Python编程中的字符串
2015/10/14 Python
python字符串,数值计算
2016/10/05 Python
python爬虫使用cookie登录详解
2017/12/27 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python中交换两个元素的实现方法
2018/06/29 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
2014国庆节标语口号
2014/09/19 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
青年志愿者活动感想
2015/08/07 职场文书
python中urllib包的网络请求教程
2022/04/19 Python