jQuery.deferred对象使用详解对象使用详解
一、前言一、前言
jQuery1.5之前,如果需要多次Ajax操作,我们一般会使用下面的两种方式:
1).串行调用Ajax
$.ajax({ success: function() {
$.ajax({ success: function() {
$.ajax({ //callbacks...
});
});
});
这种方式代码可读性差,效率低,晦涩难懂,调试和排错的复杂度大。
2).并行调用Ajax
var promises = [];
$.ajax({
success: function() {
promises.push('resolved');
check();
}
});
$.ajax({
success: function() {
promises.push('resolved');
check();
}
});
$.ajax({
success: function() {
promises.push('resolved');
check();
}
});
var check = function() { //checks for all 3 values in the promises array }
这种方式对于callbacks函数调用来说已经很不错了,并行取得数据,可读性良好。缺点就是代码冗长,可扩展性差,调试和
排错的复杂度高。
jQuery1.5之后,增加了deferred对象。因此可以用下面这种方式实现和上面同样的需求。
1)Promise
var address = $.ajax({});
var tweets = $.ajax({});
var facebook = $.ajax({});
render_side_bar = function(address, tweets, facebook){
//render sidebar
}
render_no_side_bar = function () { }
$.when(address, tweets, facebook).then(render_side_bar, render_no_side_bar)
可以看出,代码可读性良好,可扩展性高,并且大大降低了调试和排错的复杂度。
那么问题来了,promises和deferred对象究竟是个什么玩意呢?
二、详解二、详解
2.什么是deferred对象?
deferred对象即延迟对象,它是jQuery 1.5版本引入的一种回调函数的解决方案,代表了将要完成的某种操作,并且提供了一
些方法,帮助用户使用。
deferred对象是对Promises接口的实现。jQuery 1.5版本以及之后所有的Ajax返回的jqXHR对象就是一个deferred对象。
2.deferred对象的几大好处
2.1.为同一操作指定多个回调函数
deferred对象的好处之一,就是它允许你为一个操作添加多个回调函数,这在传统的ajax中是无法实现的。
$.ajax("test.html")
.done(function(){ alert("first success callback!");} )
评论0