亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript異步處理與Jquery deferred對象用法總結

2019-11-19 11:24:15
字體:
來源:轉載
供稿:網友

本文實例講述了javascript異步處理與Jquery deferred對象用法。分享給大家供大家參考,具體如下:

這是項目組老大整理的一些關于jquery 異步處理請求,以及使用 jquery deferred 對象的一些常見方法。雖然是項目上總結出來的。但也比較通用,分享在這里。

  • 所有的Ajax操作都采用異步處理。
  • 采用Jquery的Deffered對象來處理異步調用。
  • 因為是異步調用,所以$.Ajax函數的返回值不代表返回的結果,只是一個Deffered對象。
  • Ajax調用完成后執行的邏輯可以寫成函數作為參數傳遞給Deffered對象的done(), fail(), always()函數來執行。
  • 如果一個函數包含Ajax調用,那么這個函數必須將Ajax返回的異步對象作為自己的返回值,否則函數的調用者無法保證后續代碼的正常執行順序。

例如:

function readData(){  $.ajax({ url:"test", dataType:"json" })  .done(function() {    //....  });}readData();//...這里想添加一些后續處理,但程序將在Ajax回調前執行,所以無法達到預期目的正確的代碼:function readData(){  return $.ajax({ url:"test", dataType:"json" })  .done(function() {    //....  });}readData().done(function () {  //...想添加的后續處理可以加在這里處理});
  • 如果需要調用多個Ajax請求,請注意Ajax請求是否可以同時進行,如果可以應該使用when()函數來同時執行,以提高程序的運行效率和可讀性。
  • deferred對象有一個方法promise(),可以阻止其他代碼修改deferred對象的狀態,也就是其他代碼調用reslove()reject()無效。
var dtd = $.Deferred(); // 新建一個Deferred對象var wait = function(dtd){  var tasks = function(){    alert("執行完畢!");    dtd.resolve(); // 改變Deferred對象的執行狀態  };  setTimeout(tasks,5000);  return dtd;};wait(dtd).done(function(){ alert("成功了!"); }).fail(function(){ alert("出錯啦!"); });dtd.resolve();  //這里修改了dtd對象的狀態,導致立刻出現“成功了!”的提示

正確的例子:

var dtd = $.Deferred(); // 新建一個Deferred對象var wait = function(dtd){  var tasks = function(){    alert("執行完畢!");    dtd.resolve(); // 改變Deferred對象的執行狀態  };  setTimeout(tasks,5000);  return dtd.promise(); // 返回promise對象};wait(dtd).done(function(){ alert("成功了!"); }).fail(function(){ alert("出錯啦!"); });dtd.resolve();  //這里修改dtd對象的狀態無效
  • 一些情況的處理:

1.嵌套異步操作的處理。

如果一個函數內部執行異步任務,并且在異步任務的done回調內會嵌套另一個異步任務,那么簡單返回第一個異步任務的返回值是不行的,需要另外自行定義一個Deferred對象作為返回值。

function loadComponent(id){  var dtd = $.Deferred();  //loadScript將異步加載一個js文件,所以返回值是一個Deffered對象  return loadScript(id)  .done(function() {    //js加載后,觸發component的load事件,此事件內將使用Ajax獲取頁面模板和數據,生成最終的html    app.getComponent(id).trigger("load")    .done( function(){      dtd.reslove(agruments);    }).fail( function(){      dtd.reject(agruments);    });  });  //返回自定義的dtd對象,才能保證返回值的done回調在load事件完成后執行  return dtd;}

2.一個函數內同時包含同步和異步case的處理。

/* 這個函數返回一個異步對象,當異步對象執行done時,表示component被加載完成 */function requireComponent(id){  if (this.components[id]){    //如果component已經被加載,直接返回一個reslove的異步對象,否則返回值內容與else分支不同,后續代碼難以處理    var dtd = $.Deferred();    dtd.reslove(this.getComponent(id));    return dtd;  }  else{    //如果component未被加載,loadScript將異步加載JavaScript并執行,然后將被加載的component放入this.components    return loadScript(id);  }}
  • Jquery異步模型有一個缺點,就是缺乏類似wait操作的處理能力,如果多個異步調用要順序發生時,就要在done里面嵌套處理,影響代碼可讀性.
aSyncTask1.done( function () {  //...第一個操作完成后的處理  asyncTask2.done( function () {    //...第二個操作完成后的處理    asyncTask3.done( function () {      //...第三個操作完成后的處理    });  })})

更多關于jQuery相關內容感興趣的讀者可查看本站專題:《jQuery form操作技巧匯總》、《jQuery文件與目錄操作技巧匯總》、《jquery中Ajax用法總結》、《jQuery擴展技巧總結》、《jquery選擇器用法總結》及《jQuery常用插件及用法總結

希望本文所述對大家jQuery程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久av| 日韩在线视频免费观看高清中文| 少妇高潮 亚洲精品| 日韩最新中文字幕电影免费看| 久久久中精品2020中文| 日韩欧美aⅴ综合网站发布| 国产91成人video| 亚洲xxx视频| 国产精品影片在线观看| 97视频网站入口| 亚洲国产高清自拍| 亚洲自拍偷拍视频| 久久视频免费在线播放| 国产精品久久久久不卡| 日韩av综合网站| 国产精品久久久久久久久久三级| 中文字幕久久精品| 欧美日韩中文字幕日韩欧美| 91日本在线视频| www国产精品com| 亚洲码在线观看| 不卡毛片在线看| 欧美在线观看www| 亚洲成人1234| 欧美国产日韩一区| 国产区亚洲区欧美区| 中文字幕亚洲欧美在线| 亚洲色图av在线| 久久九九有精品国产23| 91久久国产精品91久久性色| 成人激情综合网| 91精品一区二区| 91国产精品91| 亚洲大尺度美女在线| 狠狠躁天天躁日日躁欧美| 欧美性猛交xxxx乱大交蜜桃| 国内精品久久久久久影视8| 国产精品久久色| 欧美不卡视频一区发布| 久久精品视频免费播放| 最近中文字幕日韩精品| 国产99久久精品一区二区 夜夜躁日日躁| 一本一本久久a久久精品牛牛影视| 欧美激情精品久久久久| 欧美日韩一区二区免费视频| 国产美女扒开尿口久久久| 伊人男人综合视频网| 91日韩在线视频| 亚洲精品乱码久久久久久金桔影视| 中文字幕日韩综合av| 国产91对白在线播放| 欧美日韩激情美女| 97超视频免费观看| 在线视频日韩精品| 亚洲影视九九影院在线观看| 成人欧美一区二区三区在线| 久久综合五月天| 国产精品嫩草影院一区二区| 欧美在线不卡区| 午夜精品一区二区三区在线视| 欧美成人免费在线观看| 一色桃子一区二区| 欧美午夜精品在线| 日本人成精品视频在线| 日韩毛片中文字幕| 中文字幕日韩精品在线| 成人黄色在线免费| 国产网站欧美日韩免费精品在线观看| 精品久久久中文| 69影院欧美专区视频| 欧美激情第99页| 狠狠爱在线视频一区| 久久精品中文字幕一区| 欧美日韩xxx| 亚洲欧美国产精品va在线观看| 亚洲精品在线视频| 亚洲国产精彩中文乱码av| 亚洲影视中文字幕| 成人在线一区二区| 亚洲欧美制服中文字幕| 91精品国产成人www| 一个人看的www久久| 日韩在线精品视频| 久久久免费电影| 成人中心免费视频| 欧美色道久久88综合亚洲精品| 国产精品高潮呻吟久久av野狼| 亚洲美女www午夜| 国产精品视频成人| 欧美大片在线看免费观看| 欧美日韩一区二区三区| 在线播放精品一区二区三区| 欧美成人免费小视频| 欧美日韩在线视频观看| 97在线观看视频| 亚洲第一精品夜夜躁人人爽| 精品视频—区二区三区免费| 亚洲一区二区三区四区视频| 奇米一区二区三区四区久久| 国产午夜精品全部视频播放| 日韩久久精品成人| 欧美一级淫片videoshd| 国产91网红主播在线观看| 国产精品视频公开费视频| 国产精品国产三级国产aⅴ9色| 日韩国产高清污视频在线观看| 国产色综合天天综合网| 日本精品视频网站| 国产91av在线| 亚洲国产精久久久久久久| 91成人在线视频| 亚洲另类xxxx| 国产福利视频一区| 国产成人久久精品| 精品国产一区二区三区久久狼黑人| 丝袜一区二区三区| 亚洲精品女av网站| 亚洲精品一区中文| 亚洲精品视频免费在线观看| 久久深夜福利免费观看| 91九色国产视频| 国产精品久久久久久av福利软件| 久久久精品美女| 欧美人与性动交a欧美精品| 国产精品九九久久久久久久| 一区二区三区国产视频| 国产一区二区三区日韩欧美| 91精品国产一区| 国产精品日韩欧美| 国产99久久久欧美黑人| 欧美性视频网站| 久久久噜噜噜久噜久久| 欧美午夜激情小视频| 亚洲人成在线电影| 国产精品亚洲网站| 欧美在线观看网址综合| 亚洲天堂网站在线观看视频| 精品欧美激情精品一区| 国产精品日韩欧美综合| 精品久久久久久久久久久久久久| 久久精品一区中文字幕| 国产精品自产拍在线观看中文| 久久成人人人人精品欧| 亚洲精品视频网上网址在线观看| 国产精品久久久久久久久借妻| 国产精品成久久久久三级| 欧美专区日韩视频| 精品久久久久久久久久ntr影视| 亚洲电影免费观看高清完整版在线| 欧美性猛交xxxx| 日韩精品视频中文在线观看| 国产成人拍精品视频午夜网站| 亚洲欧美精品一区| 中文字幕日韩精品在线观看| 91精品国产91久久久久福利| 欧美超级乱淫片喷水| 少妇av一区二区三区| 国产精品福利网| 国产91色在线| 亚洲xxx自由成熟| 欧美黑人性猛交| 亚洲美女在线视频| 日韩欧美亚洲范冰冰与中字| 亚洲va欧美va国产综合久久|