麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > AJAX > 正文

關于多個Ajax請求執行返回先后的問題示例探討

2024-09-01 08:32:49
字體:
來源:轉載
供稿:網友
這篇文章主要與大家探討下關于多個Ajax請求執行返回先后的問題,需要的朋友可以參考下
 
 

有時候在一個業務事件處理流程上,可能會遇到點擊了一個按鈕或者其他事件觸發了一個動作

需要執行兩個以上的Ajax請求,但是可能要顧慮到Ajax請求執行的先后順序,有時候Ajax請求順序出問題,會導致各種問題

例如現在有兩個ajax事件,分別為ajax1 ,ajax2

一個叫做main的方法調用執行入口

1.

function main(){ajax1(data,callback);ajax2(data,callback);}

如果我們按照上面的方法去執行,表面上看似乎是讓ajax1先執行,ajax2后執行。如果不仔細想,有些人會認為ajax1先執行完,之后才會執行ajax2.事實上真的會如此嗎?

答案是 不一定 。當然對于有多個ajax請求對執行返回順序沒要求的情況,我們不需要過多考慮誰先執行,誰先返回的
那要是考慮ajax事件執行先后順序以及返回順序呢

要是這樣那怎么解決ajax事件的執行返回先后順序呢

當然現在你應該會想到ajax回調函數,Good,這是一個好主意
現在按這種思路改變一下方法,方法如下
 

function main(){ajax1( data , ajax2( ) );}

這樣看起來,你是不是覺得Very Good呢?真的嗎?真的是Very Good嗎?

Maybe,But in some case ,這樣寫可能有些不方便,當然也許你可能不會遇到,但是我遇到了一種比較特殊的情況
比如下面這種可能
 

function main(){aa(data);ajax1(data,callback);}function aa(val){var data=val+"";//這里是對傳入數據進行修改,封裝,當然這里是隨便寫的ajax2(data,ajax2Callback);}function ajax2Callback(){console.log("=====回調函數ajax2Callback()執行========");console.log("=====這里正在執行ajax執行完畢后必須執行的操作========");}

你認為這種情況可以滿足ajax2在ajax1先執行并且先執行完畢嗎

仔細想想你會發現得到答案

No!
Now ,How to solve this proplem . How to make sure ajax2 finished before ajax1 .

當然,你可能會說,這不簡單,把ajax1的調用放進ajax2方法回調方法ajax2Callback的最后面

不得不承認這是一種解決方案,但是如果是一個很古老的項目,已經做了好幾年的項目了。里面調用復雜,要盡量去避免修改以前的底層方法,也許你為了修改這個bug,就這樣簡單解決了,你可能又會創造多個bug.

那到底還有沒有好的方法去解決了?

Sure,solve it easy .但是工作經驗不足的人很少會一下想到,只會用前面的辦法草草解決問題,不管三七二十一。

而我采用了一種比較笨的方法,而且還存在一定問題,使用了setTimeOut定時器執行一次,但是問題想必大家都知道,誰知道這個Ajax會執行多久了,還好有大神指導了下我,
還記得對數組排序嗎,說道這個,也許你會好奇,這與數組排序有啥關系。下面會告訴你答案

代碼說明一切:

function main(){var temp=ajax2Callback;ajax2Callback=function(){temp();ajax1(data,callback);}aa(data);ajax2Callback=temp; }function aa(val){var data=val+"";//這里是對傳入數據進行修改,封裝,當然這里是隨便寫的ajax2(data,ajax2Callback);}function ajax2Callback(){console.log("=====回調函數ajax2Callback()執行========");console.log("=====這里正在執行ajax執行完畢后必須執行的操作========");}

看出來沒,是不是很有趣,沒有修改最低層的方法,僅僅修改了main方法,是不是很像數組排序里的當我們比較兩個值大小時,不管你用冒泡排序,還是快速排序,是不是都設置了一個臨時變量去存儲值。當然排序比較大小時,你可以沒必要設置臨時變量,僅僅用一個^運算符去做賦值比大小,甚至你可以偷懶到直接調用系統的Arrays.sort()方法,當然這都可以

function changeSearchContactType(obj){if (!obj){return;}var contactType = obj.value;var origRenderTemplate = renderTemplate;renderTemplate = function(data){origRenderTemplate(data);ajaxAnywhere.submitAJAX('setSearchContactType');}var result = TemplateHelper.changeSearchContactTemplate(contactType, contactUIUID);renderTemplate = origRenderTemplate;return result;}
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久一区国产 | 午夜视频你懂的 | 国产91一区二区三区 | 99在线热播精品免费 | 中文字幕在线观看1 | 精品久久久久久久久久久下田 | 日韩精品中文字幕在线观看 | 成人区一区二区 | 久久久综合久久久 | 蜜桃视频在线观看视频 | 黄网站免费在线看 | 成人在线视频免费观看 | 中日无线码1区 | 色综合激情 | 国产一级一区 | 成人免费av在线 | 巨根插入| 91福利社在线 | 国产亚洲高清在线精品不卡 | 成人三级电影网址 | 国产69精品久久99不卡免费版 | 免费放黄网站在线播放 | 国产精品欧美久久久久一区二区 | 超级av在线 | 久久草在线视频国产 | 亚洲网站在线观看视频 | 在线成人av观看 | 久久久在线免费观看 | 高清中文字幕在线 | 黄污网址| 美女黄影院 | 国产免费成人 | 久久久国产精品电影 | 夜夜b | 少妇一级淫片免费放4p | 毛片视频免费观看 | 久久视频精品 | 日韩精品久久久久久久电影99爱 | 国产午夜电影 | 欧美成人精品一区二区 | 精品久久一区二区三区 |