如何解決多個Ajax請求執行返回先后的問題

這篇文章主要講解了“如何解決多個Ajax請求執行返回先后的問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何解決多個Ajax請求執行返回先后的問題”吧!

成都創新互聯致力于互聯網品牌建設與網絡營銷,包括成都網站制作、網站設計、SEO優化、網絡推廣、整站優化營銷策劃推廣、電子商務、移動互聯網營銷等。成都創新互聯為不同類型的客戶提供良好的互聯網應用定制及解決方案,成都創新互聯核心團隊十余年專注互聯網開發,積累了豐富的網站經驗,為廣大企業客戶提供一站式企業網站建設服務,在網站建設行業內樹立了良好口碑。

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

需要執行兩個以上的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;
}

感謝各位的閱讀,以上就是“如何解決多個Ajax請求執行返回先后的問題”的內容了,經過本文的學習后,相信大家對如何解決多個Ajax請求執行返回先后的問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

名稱欄目:如何解決多個Ajax請求執行返回先后的問題
網站地址:http://m.kartarina.com/article32/gecgsc.html

成都網站建設公司_創新互聯,為您提供移動網站建設網站導航ChatGPT網站制作標簽優化搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設
主站蜘蛛池模板: AV无码免费永久在线观看| 欧美性生交xxxxx无码影院∵| 亚洲av无码专区青青草原| 亚洲AV无码成人精品区日韩| 人妻老妇乱子伦精品无码专区 | 久久亚洲AV成人无码电影| 无码一区二区三区爆白浆| 亚洲Aⅴ无码专区在线观看q| 精品久久久久久久无码久中文字幕| 久久久久亚洲精品无码网址| 中文字幕av无码无卡免费| 午夜福利av无码一区二区| YW尤物AV无码国产在线观看| 亚洲无码一区二区三区| 无码孕妇孕交在线观看| 亚洲精品无码成人片在线观看| JAVA性无码HD中文| 国产午夜无码精品免费看| 亚洲成av人片在线观看天堂无码| 久久久久久精品无码人妻| 国产精品VA在线观看无码不卡| 用舌头去添高潮无码视频| 亚洲AV日韩AV无码污污网站| 精品无码一区二区三区爱欲九九 | 亚洲精品无码久久久久APP | 亚洲爆乳无码精品AAA片蜜桃| 日韩精品久久无码人妻中文字幕| 亚洲乱亚洲乱妇无码麻豆| 中文字幕无码久久久| 国产精品免费看久久久无码 | 国产成人无码一区二区三区| 精品少妇人妻av无码专区| 国产av永久精品无码| 丰满亚洲大尺度无码无码专线| 亚洲av专区无码观看精品天堂| 精品日韩亚洲AV无码一区二区三区| 国产AV一区二区三区无码野战| 亚洲精品无码mv在线观看网站 | 亚洲av中文无码乱人伦在线r▽| 国产成人无码区免费内射一片色欲| 四虎影视无码永久免费|