今天就跟大家聊聊有关延迟对象与扩展方法怎么在jQuery中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强> 1递延对象强>
递延对象是jQuery的回调函数解决方案,它是从jQuery1.5.0版本开始引入的功能
<强>递延对象的方法强>
(1) .Deferred美元()生成一个递延对象。
(2) deferred.done()指定操作成功时的回调函数
(3) deferred.fail()指定操作失败时的回调函数
(4) deferred.promise()没有参数时,返回一个新的延迟对象,该对象的运行状态无法被改变,接受参数时,作用为在参数对象上部署递延接口。
(5) deferred.resolve()手动改变延迟对象的运行状态为“已完成“,从而立即触发完成()方法。
(6) deferred.reject()这个方法与deferred.resolve()正好相反,调用后将延迟对象的运行状态变为“已失败“,从而立即触发失败()方法
(7)当美元()为多个操作指定回调函数。
除了这些方法以外,延期对象还有二个重要方法,上面的教程中没有涉及到。
(8) deferred.then ()
有时为了省的事,可以把完成的()和()失败合在一起写,这就是那么()方法。
当美元($ . ajax (,“/main.php",)) 区间(successFunc, failureFunc );
如果那么()有两个参数,那么第一个参数是完成()方法的回调函数,第二个参数是失败()方法的回调方法。如果那么()只有一个参数,那么等同于()完成。
(9) deferred.always ()
这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
$ . ajax (,“test.html",) 故事(,函数(){,警报(“已执行!“);},),
来点儿
<强> 1)ajax操作的链式写法强>
先回顾一下jQuery ajax的操作的传统写法:
. ajax({美元 url:,“test.html", 成功:函数(){ alert(“哈哈,成功了!“); }, 错误:函数(){ alert(“出错啦!“); } });
在上面的代码中,$ . ajax()接受一个对象参数,这个对象包含两个方法:成功方法指定操作成功后的回调函数,错误方法指定操作失败后的回调函数。
. ajax()美元操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作,如果高于1.5.0版本,返回的是递延对象,可以进行链式操作。
有了延迟对象之后,可以这样写了
. ajax (“test.html")美元 .done(函数(){,警报(“哈哈,成功了!“);,}) fail(函数(){,警报(“出错啦!“);,});
上面代码中完成的()相当于成功方法,失败()相当于错误方法。采用链式写法以后,代码的可读性大大提高。
<强> 2)指定同一操作的多个回调函数强>
递延对象的一大好处,就是它允许你自由添加多个回调函数。
还是以上面的代码为例,如果ajax操作成功后,除了原来的回调函数,我还想再运行一个回调函数,怎么办?
很简单,直接把它加在后面就行了。
. ajax (“test.html")美元 .done(函数(){,警报(“哈哈,成功了!“);},) fail(函数(){,警报(“出错啦!“),,},) .done(函数(){,警报(“第二个回调函数!“);},),
回调函数可以添加任意多个,它们按照添加顺序执行。
<强> 3)为多个操作指定回调函数强>
递延对象的另一大好处,就是它允许你为多个事件指定一个回调函数,这是传统写法做不到的。
请看下面的代码,它用到了一个新的方法当美元():
当美元($ . ajax (“test1.html"), $ . ajax (“test2.html")) .done(函数(){,警报(“哈哈,成功了!“);,}) fail(函数(){,警报(“出错啦!“);,});
这段代码的意思是,先执行两个操作$ . ajax (“test1.html")和$ . ajax (“test2.html"),如果都成功了,就运行完成()指定的回调函数,如果有一个失败或都失败了,就执行失败()指定的回调函数。
<强> 4)普通操作的回调函数接口(上)强>
递延对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。也就是说,任何一个操作,不管是ajax操作还是本地操作,也不管是异步操作还是同步操作——都可以使用延迟对象的各种方法,指定回调函数。
我们来看一个具体的例子。假定有一个很耗时的操作等待: