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怎么清理缓存_Laravel optimize clear命令详解
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何优化应用性能?(缓存和优化命令)
,网页ppt怎么弄成自己的ppt?
如何获取PHP WAP自助建站系统源码?
Laravel如何实现数据库事务?(DB Facade示例)
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何在阿里云域名上完成建站全流程?
高防服务器租用如何选择配置与防御等级?
Linux系统运维自动化项目教程_Ansible批量管理实战
如何用美橙互联一键搭建多站合一网站?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何用PHP快速搭建CMS系统?
Laravel如何使用查询构建器?(Query Builder高级用法)
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel怎么实现验证码(Captcha)功能
如何用免费手机建站系统零基础打造专业网站?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
晋江文学城电脑版官网 晋江文学城网页版直接进入
Android 常见的图片加载框架详细介绍
简历在线制作网站免费版,如何创建个人简历?
Laravel如何使用模型观察者?(Observer代码示例)
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在云虚拟主机上快速搭建个人网站?
如何在建站宝盒中设置产品搜索功能?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
详解vue.js组件化开发实践
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
音响网站制作视频教程,隆霸音响官方网站?
Laravel如何使用Sanctum进行API认证?(SPA实战)
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何挑选高效建站主机与优质域名?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在IIS服务器上快速部署高效网站?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
简单实现Android文件上传
如何用好域名打造高点击率的自主建站?
郑州企业网站制作公司,郑州招聘网站有哪些?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】

