jQuery回调方法

是时候用Deferred了
jQuery在1.5版本之后,引入了Deferred对象,提供的很方便的广义异步机制。详情可参看阮一峰老师的这篇文章http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html。
于是我用Deferred对象改写了代码,如下:

 function getData3() {
 var defer = $.Deferred(); 
 $.ajax({        
  url: "p.php",      
  //async : false,       
  success: function(data)   {  
  defer.resolve(data)        
  }    
  });
  return defer.promise();
 }
 $(".btn3").click(function() {
 $(".loadingicon").show();    
 $.when(getData3()).done(function(data) {$(".loadingicon").hide();    
 alert(data);
 });
 });

可以看到我在ajax请求中去掉了async:false,也就是说,这个请求又是异步的了。另外请注意success函数中的这一 句:defer.resolve(data),Deferred对象的resolve方法可传入一个参数,任意类型。这个参数可以在done方法中拿到, 所以我们异步请求来的数据就可以以这样的方式来返回了。
至此,问题得到了解决。Deferred对象如此强大且方便,我们可以好好利用它。

你可能感兴趣的:(jQuery回调方法)