位置: 编程技术 - 正文

jQuery通过deferred对象管理ajax异步(jquery通过属性值获取元素)

编辑:rootadmin

推荐整理分享jQuery通过deferred对象管理ajax异步(jquery通过属性值获取元素),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery通过对什么的封装简化了html,jquery通过对什么的封装简化了html,jquery通过属性值获取元素,jquery通过对什么的封装简化了html,jquery通过对什么的封装简化了html,jquery通过name获取input的值,jquery通过对什么的封装,jquery通过对什么的封装简化了html,内容如对您有帮助,希望把文章链接给更多的朋友!

今天跟大家分享一个jquery中的对象-deferred。其实从jQuery 1.5.0版本开始引入的一个新功能----deferred对象。不过可能在实际开发过程中用到的并不多,所以没有太在意。

什么是deferred对象?

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。

通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。

但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了deferred对象。

简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。

这里先不说deferred的概念,我们先看一个例子。

还记得初学的时候,遇到一个实例,先是要ajax请求一个接口(a.json),从返回的数据中获得一个id1值。然后再请求一个接口(b.json)获得id2,最后需要对这两个id值同时进行操作。

错误解法

那个时候初学,首先想到的方案(现在想想,很傻很天真...)

因为那个时候,还没有理解异步的概念,所以以为,第二次ajax的时候id已经有值了,但是运行之后才发现,变量id其实根本没被赋值。想要测试上面代码,点这里

也就是这一刻,我真正明白了:ajax是异步的!!!。

傻瓜式解法

发现上面那个方法不能用之后,分析了一下,弹出undefined是因为弹出之前id还没有被赋值,那我保证在弹出之前给id赋值不就解决了吗?好的,于是我想到了下面这个方法:

逻辑虽然正确了,但总觉得怪怪的,如果这里需要嵌套3层呢?4层呢?。。。ajax里面嵌套ajax,如果数据很多,访问速度慢,嵌套更多层,会导致性能下降、影响用户体验、代码不好维护等等问题。所以一般不推荐这种方法。总之,这种写法让我难以接受。

所以思来想去,觉得不妥。。。然后那个时候就在一个前端群里,询问各种大牛,直到一个大牛告诉我让我百度一下deferred,后来认真学习了下,觉得不错。

使用deferred对象

deferred对象简介

deferred是jquery中的扩展的一个对象(1.5.0以上的版本支持deferred)。defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。

简单说,deferred对象就是jQuery的回调函数解决方案。

再简单说,deferred对象用来管理异步操作,而ajax就是一种异步操作。

deferred基本语法

deferred让ajax支持新的写法,代码如下:

这个大家应该都知道。现在在编辑器敲入ajax,然后回车,提示的ajax语法结构就是这样链式的写法。

done函数就是ajax请求成功的回到函数;

fail函数就是ajax请求失败的回调函数。

使用deferred的解决方法

值得一提的是,上面代码中done函数的参数,对应的是前面每一个ajax请求返回的数据

jQuery通过deferred对象管理ajax异步(jquery通过属性值获取元素)

上面的代码中,用到了deferred对象的when方法。

它的描述是:

提供一种方法来执行一个或多个对象的回调函数。

这里的ajax1和ajax2就是deferred对象,done和fail就是回调函数。上面代码的意思是:

只有当两个ajax请求都成功返回数据时,执行done函数;只要有一个请求不成功,就执行fail函数。

另外值得一提的是:$.when方法的参数,只支持deferred对象,而ajax返回的就是deferred对象。`

这就已经实现了上面的需求了。请求两个接口,获得两个数据,都成功时,对这两个数据同时进行处理。而且这种链式写法,让读者一目了然,而且便于维护扩展。

deferred方法汇总

提到的方法

$.Deferred():生成一个deferred对象。

$.when() 为多个操作指定回调函数。

deferred.done():指定操作成功后的回调函数

deferred.fail():指定操作失败后的回调函数

未提到的方法

&#;deferred.resolve()方法和deferred.reject()方法

deferred对象执行回调函数之前会有一个执行状态的存在,执行状态一共有三种———未完成、已完成和已失败。

未完成状态,则会继续等待,或者执行progress()指定的回调函数。

已完成状态,则会执行done()方法指定的回调函数。

已失败状态,则会执行fail()方法指定的回调函数。

所以这里的deferred.resolve()方法就是手动将deferred对象的状态改为已完成,继而执行done方法; deferred.reject()方法就是手动将状态改为已失败,继而执行fail方法。

下面来看一个例子:

结果:等待5秒钟,先弹出“succeed”,在弹出“执行完毕!”。

分析一下代码执行过程:

$.when()里面的参数是wait函数,也就是一个deferred对象,所以可以继续执行setTimeout函数,等待5s,执行tasks函数,然后手动改变了状态为“已完成”,所以执行done方法,弹出“succeed”,然后弹出“执行完毕!”。

deferred.then():有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。

当then方法只有一个参数时,相当于done方法。当有两个参数时,第一个相当于done方法,第二个相当于fail方法。

总结

deferred对象通过对一个ajax请求的各种回调函数的控制,让jquery写ajax变的简单、容易维护、容易扩展。

以上所述是小编给大家介绍的jQuery通过deferred对象管理ajax异步的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

jQuery添加和删除输入文本框标签代码 先给大家展示效果图,如果大家觉得还不错,请继续参考实现代码。废话不多说了,直接给大家贴代码了。代码如下:!DOCTYPEhtmlhtmlheadtitlejquery删除添加

Jquery $when done then的用法详解 对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when...done...fail...then的封装,它将$.ajax这嵌套结构转成了顺序

jQuery选择器及jquery案例详解(必看) JQuery选择器解析:为了更好的或者是更快的从复杂的DOM树中找到我们需要的一类标签1.层次选择器!--当点击h2元素时,为#menu下的span元素添加色为#F的颜

标签: jquery通过属性值获取元素

本文链接地址:https://www.jiuchutong.com/biancheng/386614.html 转载请保留说明!

上一篇:jQuery中通过ajax调用webservice传递数组参数的问题实例详解

下一篇:jquery.qtip提示信息插件用法简单实例

  • 详解DB2 sqlstate 57016 SQLCODE=-668 原因码

    以上所述是小编给大家介绍的详解DB2 sqlstate SQLCODE=- 原因码 "7"错误的快速解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

    SQL Server 数据库分离与附加 就这么简单! 一、概述SQLServer提供了分离/附加数据库、备份/还原数据库、复制数据库等多种数据库的备份和恢复方法。这里介绍一种学习中常用的分离/附加方法,

    深入浅析SQL封装、多态与重载 面向对象1.类:众多对象抽象出来的2.对象:类实例化出来的3.类的定义关键字class4.类里面包含成员变量成员属性成员方法5.面向对象三大特性(1)封装

    在Sql Server中调用外部EXE执行程序引发的问题 一、先开启xp_cmdshell打开外围应用配置器—功能的外围应用配置器—实例名DatabaseEnginexp_cmdshell—启用二、解决方法usemasterExecxp_cmdshell'mkdird:csj" class="img-responsive" alt="详解DB2 sqlstate 57016 SQLCODE=-668 原因码 "7"错误的快速解决办法(详解增发万亿国债细节)">

    详解DB2 sqlstate 57016 SQLCODE=-668 原因码 "7"错误的快速解决办法(详解增发万亿国债细节)

  • 停用Windows8系统内置管理员账户的方法(win8系统停止服务)

    停用Windows8系统内置管理员账户的方法(win8系统停止服务)

  • 用CSS让表格返转的代码 IE only(css翻转正反面)

    用CSS让表格返转的代码 IE only(css翻转正反面)

  • 谈谈jQuery Ajax用法详解

    谈谈jQuery Ajax用法详解

  • 组成计税价应该是含税价还是不含税价?
  • 补提去年所得税会计分录怎么写
  • 财务软件怎么样才能用
  • 企业收到银行汇票退回的多余款项
  • 施工水电费扣除比例
  • 每股未分配利润是什么意思
  • 残疾证挂靠一年多少钱
  • 退伍士兵增值税减免账务处理
  • 债券作为交易性金融资产的账务处理
  • 收到三代手续费返还
  • 海关未抵扣证明
  • 公司对公租车保险的规定
  • 应征进口关税的公式
  • 注册公司买车划算吗
  • 饭店试菜费用如何计算
  • 2020年外资企业
  • 公司缴纳电费
  • 收回债权会计分录
  • 存根联和记账联丢失有影响吗
  • 销售已使用过的固定资产增值税
  • 计入成本的有哪些科目
  • 年初预提费用
  • 资产无偿调拨账务处理
  • 增值税收入和所得税收入不一致怎么办
  • 其他应收款社保个人部分分录
  • 增值税税负率多少为正常
  • 物流丢失了货品如何报警处理
  • wordpress相关文章插件
  • 收到完税凭证怎么做账
  • 代办营业执照费用税务编码是多少
  • 订金账务处理
  • codeigniter 教程
  • PHP:imagefontwidth()的用法_GD库图像处理函数
  • phpsubstr_replace
  • 原材料按实际成本核算需设置的科目包括
  • 商品销售税金及附加包括哪些
  • 资产负债表中其他应付款根据什么填列
  • vue3项目搭建
  • wordpress转化为html
  • 如何使用vue
  • js let用法
  • scp命令 基于SSH协议远程复制文件
  • 增值税发票丢失罚款多少
  • md5 linux
  • squid 启动命令
  • 借款凭证会计分录是什么
  • 企业所得税中哪些属于免税收入
  • 增值税多交了五万怎么办
  • 财政补贴收入账务处理
  • 销货退回与折让的关系
  • mysql 字符集
  • 资质平移后以前的工程怎么办
  • 税控盘有什么用途和作用
  • 不抵扣发票可以转抵扣吗
  • 减免增值税记账
  • MySQL入门教程
  • 小规模纳税人企业所得税怎么算
  • 存货核算方法有五种
  • 同一个单位能否交五险
  • 公立幼儿园保育员招聘条件
  • 私车公用税务处理
  • 收到去年所得税退税款会计分录
  • 网上打印的银行流水有公章吗
  • 弱电工程属于什么行业
  • window8开机
  • 安装vista
  • bios 设置
  • windows102021年更新
  • mac如何在桌面显示我的电脑
  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法
  • 虚拟机里面如何设置网络
  • cocos2dx官方教程
  • php九宫格
  • 电脑windows自动关闭
  • javascript教程
  • ActivityManagerService(四)
  • 税务稽查案件办案程序规定
  • 个人在税务局一个月能开多少
  • 广东国家税务局网上税务服务大厅
  • 注册一个信息咨询公司需要什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设