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對象如此強大且方便,我們可以好好利用它。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容