详解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 相关文章推荐
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
浅谈JavaScript字符集
May 22 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
如何用JavaScript检测当前浏览器是无头浏览器
Apr 27 Javascript
基于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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
js获取form的方法
2015/05/06 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
Python3实现Web网页图片下载
2016/01/28 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
Python单元测试简单示例
2018/07/03 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Django框架验证码用法实例分析
2019/05/10 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
Python如何在bool函数中取值
2020/09/21 Python
python 绘制国旗的示例
2020/09/27 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
企业治理工作自我评价
2013/09/26 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
长城导游词400字
2015/01/30 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
七夕情人节问候语
2015/11/11 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python