博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery的deferred对象详解
阅读量:4496 次
发布时间:2019-06-08

本文共 1761 字,大约阅读时间需要 5 分钟。

为异步操作指定回调函数,jQuery开发团队就设计了deferred对象。

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

1 ajax操作的链式写法

ajax传统写法:

$.ajax({url:'test.html',success:function(){},error:function(){}});

 

$.ajax() 操作完成之后,如果使用的是低于1.5的版本,返回的是XHR对象,没法进行链式操作,高于1.5.0版本,返回的是deferred对象,可以进行链式操作。

$.ajax('test.html').done(function(){}).fail(function(){});

done 相当于success方法 fail相当于error方法

2 可以为同一操作指定多个回调函数

$.ajax('test.html').done(function(){}).fail(function(){}).done(function(){});

回调函数可以添加任意多个,它们按照添加顺序执行。

3 为多个操作指定回调函数

$.when($.ajax("test1.html"), $.ajax("test2.html")).done(function(){ alert("哈哈,成功了!"); }).fail(function(){ alert("出错啦!"); });

这段代码的意思是,先执行两个操作$.ajax("test1.html")和$.ajax("test2.html"),如果都成功了,就运行done()指定的回调函数;如果有一个失败或都失败了,就执行fail()指定的回调函数。

$.when(wait()).done(function(){ alert("哈哈,成功了!"); }).fail(function(){ alert("出错啦!"); });

$.when()的参数只能是deferred对象。所以wait()执行之后必须返回一个deferred对象,才可以实现预期的效果,不然直接就执行done回调了。

var dfd=$.Deferred();var wait=function(dfd){var test=function(){ alert('执行完毕!'); dfd.resolve(};setTimeout(test,10000);return dtd.promise();}

 

$.when(wait(dfd)).done(function(){ alert("哈哈,成功了!"); }).fail(function(){ alert("出错啦!"); });   这样就可以实现预期的效果

dtd是一个全局对象,所以它的执行状态可以从外部改变,jQuery提供了方法。

它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。

 

不过最好是把defererd写成内部对象

var wait = function(dtd){    var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象    var tasks = function(){      alert("执行完毕!");      dtd.resolve(); // 改变Deferred对象的执行状态    };    setTimeout(tasks,5000);    return dtd.promise(); // 返回promise对象  };  $.when(wait())  .done(function(){ alert("哈哈,成功了!"); })  .fail(function(){ alert("出错啦!"); });

 

 

 

 

 

 

来自:https://www.cnblogs.com/tiancai/p/5817996.html

 

转载于:https://www.cnblogs.com/xiaofenguo/p/10490956.html

你可能感兴趣的文章
Plan : 破晓
查看>>
DotNet程序员面试问题评估
查看>>
JSON【介绍、语法、解析JSON】
查看>>
Xcode9出现错误safe area layout guide before ios 9 真正解决办法
查看>>
【Linux】zabbix_server自启动脚本
查看>>
普通用户开通sudo权限:xxx is not in the sudoers file.This incident will be reported.的解决方法...
查看>>
GNU make
查看>>
Visual Studio 2008 不能更改安装目录的原因
查看>>
threejs学习笔记04---相机动
查看>>
SAP Skill - How to search a field for which table it belongs
查看>>
parcel+vue入门
查看>>
基数排序
查看>>
有意思的网站
查看>>
任务20:DI初始化的源码解读 & 任务21:依赖注入的使用
查看>>
TypeScript完全解读(26课时)_10.TypeScript完全解读-枚举
查看>>
构建之法4
查看>>
String to Integer (atoi)
查看>>
Servlet API
查看>>
【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式
查看>>
PyCharm命令行输入
查看>>