国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:38:29
字體:
來源:轉載
供稿:網友

本文實例講述了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對象作為返回值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 安泽县| 东安县| 罗江县| 马龙县| 军事| 长宁区| 小金县| 门源| 烟台市| 岳阳县| 达尔| 张掖市| 沙河市| 麻江县| 崇信县| 绩溪县| 二连浩特市| 潞西市| 于都县| 平泉县| 栾川县| 清镇市| 呼和浩特市| 大渡口区| 吕梁市| 梅河口市| 巴林左旗| 天长市| 深泽县| 疏勒县| 利川市| 高安市| 石林| 云南省| 宜昌市| 兰州市| 韶山市| 安宁市| 永福县| 资兴市| 宣恩县|