jQuery中的deferred使用方法
发布时间 - 2026-01-11 00:22:45 点击率:次deferred简介

deferred对象是jQuery的回调函数解决方案,jQuery之前的版本中异步回调这块做的不是很好,所以后期补上了该解决方案。
普遍的ajax操作方式
我们先来回顾一下jQuery中普通的ajax操作
$.ajax({
url: 'test.html',
success: function (res) {
console.log('数据读取成功');
},
error: function () {
console.log('数据读取失败');
}
});
1.5版本后的新写法如下:
$.ajax('test.html').done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
});
新版本的写法相比老版本有一个优势,就是可以自由添加多个回调函数并且按照添加顺序执行:
$.ajax('test.html').done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
}).done(function (res) {
console.log('这是第二个成功的回调函数');
});
为多个ajax指定回调函数
我们可以通过when方法,为多个事件指定一个回调函数
$.when($.ajax('test.html'), $.ajax('test2.html')).done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
});
为普通函数指定回调函数
前面说到的when是用于ajax方法,而ajax其实是deferred对象,如果不是ajax对象,换成普通的函数呢,直接使用when是不会有效果的,会直接执行done方法
所以我们需要手动新建一个deferred对象
var defer = $.deferred(); //新建一个deferred对象
var wait = function (defer) {
var tasks = function () {
console.log('执行完毕!');
defer.resolve(); //改变deferred对象的执行状态 - 成功
};
setTimeout(tasks, 5000);
return defer;
};
这里的resolve就是触发done的,对应的reject方法则是用来调用fail方法的。
var defer = $.deferred(); //新建一个deferred对象
var wait = function (defer) {
var tasks = function () {
console.log('执行完毕!');
defer. reject(); //改变deferred对象的执行状态 - 失败
};
setTimeout(tasks, 5000);
return defer;
};
执行方法
$.when(wait(defer)).done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
});
进一步优化
上面的代码还有一些问题,defer是暴露在全局的,所以我们是可以通过在全局进行defer.resolve()来提前回调。
为了避免这种情况,jQuery提供了deferred.promise()方法,它的作用是在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done方法和fail方法)屏蔽与改变执行状态有关的方法(比如resolve和reject方法)。
var defer = $.deferred(); //新建一个deferred对象
var wait = function (defer) {
var tasks = function () {
console.log('执行完毕!');
defer.resolve(); //改变deferred对象的执行状态 - 成功
};
setTimeout(tasks, 5000);
return defer.promise();
};
$.when(wait(defer)).done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
});
也可以把defer包在函数中
// 普通方法
var wait = function () {
var defer = $.deferred(); //新建一个deferred对象
var tasks = function () {
console.log('执行完毕!');
defer.resolve(); //改变deferred对象的执行状态 - 成功
};
setTimeout(tasks, 5000);
return defer.promise();
};
$.when(wait()).done(function (res) {
console.log('数据读取成功');
}).fail(function () {
console.log('数据读取失败');
});
// 执行异步
var setAjax = function () {
var defer = $.Deferred();
if (xhr) {
xhr.abort();
xhr = null;
}
var xhr = $.ajax({
url: 'test.html',
success: function (res) {
console.log('数据读取成功');
defer.resolve(res);
},
error: function () {
console.log('数据读取失败');
defer.reject();
}
});
return defer.promise();
}
$.when(setAjax()).then(function (res) {
console.log('数据读取成功', res);
}, function () {
console.log('数据读取失败');
});
以上所述是小编给大家介绍的jQuery中的derferred使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# jquery
# deferred
# jQuery使用deferreds串行多个ajax请求
# jQuery中deferred对象使用方法详解
# jQuery.deferred对象使用详解
# jquery基础教程之deferred对象使用方法
# jQuery源码分析-05异步队列 Deferred 使用介绍
# jQuery的deferred对象使用详解
# 在jQuery1.5中使用deferred对象 着放大镜看Promise
# 在jQuery 1.5中使用deferred对象的代码(翻译)
# 回调
# 新建一个
# 多个
# 法相
# 小编
# 这是
# 是在
# 很好
# 在此
# 上了
# 则是
# 说到
# 我们可以
# 可以通过
# 第二个
# 给大家
# 这种情况
# 如果不是
# 这块
# 还有一些
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel如何处理和验证JSON类型的数据库字段
如何在橙子建站上传落地页?操作指南详解
深圳网站制作培训,深圳哪些招聘网站比较好?
如何用wdcp快速搭建高效网站?
Firefox Developer Edition开发者版本入口
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何在香港免费服务器上快速搭建网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel如何实现一对一模型关联?(Eloquent示例)
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
香港服务器如何优化才能显著提升网站加载速度?
如何快速生成高效建站系统源代码?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何快速搭建安全的FTP站点?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何利用DOS批处理实现定时关机操作详解
北京企业网站设计制作公司,北京铁路集团官方网站?
Android利用动画实现背景逐渐变暗
Laravel怎么实现验证码(Captcha)功能
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
企业网站制作这些问题要关注
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
如何用低价快速搭建高质量网站?
教你用AI润色文章,让你的文字表达更专业
香港服务器WordPress建站指南:SEO优化与高效部署策略
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel集合Collection怎么用_Laravel集合常用函数详解
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
成都网站制作公司哪家好,四川省职工服务网是做什么用?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Mybatis 中的insertOrUpdate操作
如何用PHP工具快速搭建高效网站?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
如何用IIS7快速搭建并优化网站站点?
java中使用zxing批量生成二维码立牌
如何自定义建站之星网站的导航菜单样式?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置

