jQuery的deferred对象详解

今天介绍jQuery1.5.0版本引入的一个新功能--Deferred.
一,什么是Deferred对象?
开发网站中经常有一些耗时操作,这些耗时操作既有异步操作(ajax读取服务器数据),也有同步操作(遍历一些大型数组),通常这些操作不能马上得到结果,我们这时候就会用回调函数(callback),原来jQuery对回调函数方面的功能比较弱,于是有了Deferred。所以说Deferred是jQuery的异步回调解决方案。
二,ajax链式写法
jQuery的ajax操作的传统写法:

$.ajax({
  url: "test.php",
  success: function(){
    alert("哈哈,成功了!");
  },
  error:function(){
    alert("出错啦!");
  }
});

 
在jQuery1.5.0以下版本$.ajax()返回的xhr对象,没有链式写法,jQuery1.5.0以上版本支持链式写法。

$.ajax('test.php').done(function() {
     alert('成功');
 }).fail(function() {
     alert('失败');
 });

 
可以看到,done()相当于success方法,fail()相当于error方法。采用链式写法以后,代码的可读性大大提高。

三、为同一操作指定多个回调函数

很简单,还是以上面的代码为例,直接把它加在后面就行了。

$.ajax('test.php').done(function() {
     alert('成功');
 }).fail(function() {
     alert('失败');
 }).done(function(){
     alert('成功2');
 });
 
 
四、为多个操作指定回调函数

deferred对象的另一大好处,就是它允许你为多个事件指定一个回调函数。
$.when($.ajax('test1.php'),$.ajax('test2.php')).done(function() {
   alert('成功');
}).fail(function() {
   alert('失败');
});
 
这段代码的意思是,如果$.ajax('test1.php')和$.ajax('test2.php')都成功了,就执行done()指定的回调函数;如果有一个失败或都失败了,就执行fail()指定的回调函数。

相关推荐