学习记录

jQuery中的deferred对象

2017-02-27  本文已影响20人  liuziyang

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

一、ajax中的链式写法

jQuery中ajax传统的写法是

传统的ajax写法

success方法指定操作成功时执行的函数,error方法指定操作失败时执行的函数。在1.5.0之后的版本中,$.ajax操作完成之后,返回一个deferred对象,可以进行链式操作。

我们可以这样写:

ajax的链式操作

当操作成功时弹出“成功”,当操作失败时弹出“失败”,在这里,done()相当于success方法,fail()相当于error方法。

二、指定同一类操作的多个回调函数

deferred对象可以为同一个操作执行多个回调函数,她们按照指定顺序执行,比如

指定多个回调函数

三、为多个操作指定回调

deferred对象可以为多个事件指定一个回调函数,这是需要使用$.when(),例如

为多个操作指定回调

当两个ajax都执行成功时,弹出“成功”,有一个失败时弹出“失败”

四、普通操作的回调函数接口

deferred对象将这样一套回调函数接口扩展到所有的操作。例如:

普通操作的回调函数接口

在这里wait获取到的返回值是一个deferred对象,可以执行链式操作。

deferred对象有三种执行状态:未完成、已完成、已失败。当状态是未完成时,继续等待;当状态是已完成时则立即调用done()指定的操作,当状态是已失败时会立即执行fail()方法指定的操作。dtd.resolve()方法是修改deferred对象的执行状态为已完成,dtd.reject()方法是修改deferred对象的执行状态为已失败。

总结

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

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

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

deferred.promise()没有参数时,返回一个新的deferred对象,该对象的状态无法被改变;接受参数时,作用为在对象上部署deferred接口;

deferred.resolve()手动改变deferred对象的状态为已完成

deferred.reject()手动改变deferred对象的状态为已失败

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

deferred.then()

可以将done()和fail()结合起来写,就是then()方法,通常接受两个参数,第一个是done()方法的回调函数,第二个参数是fail()方法的回调函数。也可以只接受一个参数,此时等同于done();

deferred.always() 也可以用来指定回调函数,不管deferred对象的状态是已完成还是已失败都会执行always()方法指定的回调函数。

上一篇下一篇

猜你喜欢

热点阅读