详解jQuery中的deferred对象的使用(一)


Posted in Javascript onMay 27, 2016

 deferred对象是jQuery对Promises接口的实现。它是非同步操作的通用接口,可以被看作是一个等待完成的任务,开发者通过一些通过的接口对其进行设置。事实上,它扮演代理人(proxy)的角色,将那些非同步操作包装成具有某些统一特性的对象,典型例子就是Ajax操作、网页动画、web worker等等。

jQuery的所有Ajax操作函数,默认返回的就是一个deferred对象。

在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数。同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象。

那就来看看deferred对象的用法。

1.ajax的链式回调

// ajax方法返回的是一个deferred对象,可以直接使用链式写法
$.ajax('test.json').done(function(resp){
// done 相当于success回调,其中默认的参数为success回调的参数
alert('success');
}).fail(function(){
// fail 相当于error回调
alert('error');
});

还可以同时写多个回调,会按照顺序依次执行

$.ajax('test.json').done(function(resp){
// done 相当于success回调,其中默认的参数为success回调的参数
alert('success');
}).done(function(){
// do something...
}).done(function(){
// do something...
});

deferred对象还有一个then方法,其实它是一个整合done和fail的方法,它接受一到两个参数,如果有两个参数,那么第一个就是done方法的回调函数,第二个是fail方法的回调函数。如果只有一个参数,那就是done方法的回调函数。

var success = function(){
alert('success'); 
};
var error = function(){
alert('error');
};
// 两个参数
$.ajax('test.json').then(success, error);
// 一个参数
$.ajax('test.json').then(success);

jQuery还提供了一个$.when(deferreds)的方法来执行一个或多个延迟对象的回调函数,当它的参数是延迟对象时,它会在所有延迟对象代表的异步执行完后再执行相应的回调函数

$.when($.ajax('test.json'), $.ajax('demo.json')) .done(function(){
alert('success'); 
}).fail(function(){
alert('error');
});

很好理解,只有当所有异步都成功时,才会执行done方法中的回调,否则会执行fail方法中的回调,同样好理解的是的done方法中回调函数的默认参数数量则和when方法参数数量相同。

而如果when方法中传入的只是普通对象,不是deferred对象时,会立即执行done方法中的回调,回调函数的默认参数为传入when方法的对象本身。

// 当传入when方法的参数只是普通对象时
$.when({test: 'test'}).done(function(resp){
console.log(resp.test); // 'test' 
}).fail(function(){
// 由于传入的对象不是deferred对象,那么就不会调用fail中的回调了 
})

当你需要两个甚至更多的异步结束后才调用回调函数,同时这些异步ajax可能还需要修改传输方式type或者传数据data时,代码就显得很乱,可读性很差。

所以就可以对ajax进行再次封装,提高代码可读性

var ajax = function(url, type, param){
return $.ajax({
url: url,
type: type,
data: param || {} 
}); 
};
ajax('test.json').done(function(resp){
alert('success');
}).fail(function(){
alert('error');
});

以上所述是小编给大家介绍的jQuery中的deferred对象的使用(一)的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
May 21 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
Nov 19 Javascript
jQuery数据缓存功能的实现思路及简单模拟
May 27 Javascript
jQuery之动画效果大全
Nov 09 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
ES6 Promise对象概念与用法分析
Apr 01 Javascript
微信小程序获取微信运动步数的实例代码
Jul 20 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
Vue 递归多级菜单的实例代码
May 05 Javascript
简单了解JavaScript arguement原理及作用
May 28 Javascript
vue判断按钮是否可以点击
Apr 09 Vue.js
基于JS实现密码框(password)中显示文字提示功能代码
May 27 #Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
May 26 #Javascript
Node.js的npm包管理器基础使用教程
May 26 #Javascript
JavaScript中的各种操作符使用总结
May 26 #Javascript
浅析JavaScript中的对象类型Object
May 26 #Javascript
简单总结JavaScript中的String字符串类型
May 26 #Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
May 26 #Javascript
You might like
PHP中实现图片的锐化
2006/10/09 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP生成随机密码类分享
2014/06/25 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python中的延迟绑定原理详解
2019/10/11 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
"引用"与多态的关系
2013/02/01 面试题
法学专业个人求职信
2013/09/26 职场文书
营销总监岗位职责
2014/09/16 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
西安事变观后感
2015/06/12 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书