這篇文章主要講解了“如何解決多個Ajax請求執(zhí)行返回先后的問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何解決多個Ajax請求執(zhí)行返回先后的問題”吧!
沿灘網站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、成都響應式網站建設公司等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯(lián)建站。有時候在一個業(yè)務事件處理流程上,可能會遇到點擊了一個按鈕或者其他事件觸發(fā)了一個動作
需要執(zhí)行兩個以上的Ajax請求,但是可能要顧慮到Ajax請求執(zhí)行的先后順序,有時候Ajax請求順序出問題,會導致各種問題
例如現(xiàn)在有兩個ajax事件,分別為ajax1 ,ajax2
一個叫做main的方法調用執(zhí)行入口
1.
function main(){ ajax1(data,callback); ajax2(data,callback); }
如果我們按照上面的方法去執(zhí)行,表面上看似乎是讓ajax1先執(zhí)行,ajax2后執(zhí)行。如果不仔細想,有些人會認為ajax1先執(zhí)行完,之后才會執(zhí)行ajax2.事實上真的會如此嗎?
答案是 不一定 。當然對于有多個ajax請求對執(zhí)行返回順序沒要求的情況,我們不需要過多考慮誰先執(zhí)行,誰先返回的
那要是考慮ajax事件執(zhí)行先后順序以及返回順序呢
要是這樣那怎么解決ajax事件的執(zhí)行返回先后順序呢
當然現(xiàn)在你應該會想到ajax回調函數(shù),Good,這是一個好主意
現(xiàn)在按這種思路改變一下方法,方法如下
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+"";//這里是對傳入數(shù)據(jù)進行修改,封裝,當然這里是隨便寫的 ajax2(data,ajax2Callback); } function ajax2Callback(){ console.log("=====回調函數(shù)ajax2Callback()執(zhí)行========"); console.log("=====這里正在執(zhí)行ajax執(zhí)行完畢后必須執(zhí)行的操作========"); }
你認為這種情況可以滿足ajax2在ajax1先執(zhí)行并且先執(zhí)行完畢嗎
仔細想想你會發(fā)現(xiàn)得到答案
No!
Now ,How to solve this proplem . How to make sure ajax2 finished before ajax1 .
當然,你可能會說,這不簡單,把ajax1的調用放進ajax2方法回調方法ajax2Callback的最后面
不得不承認這是一種解決方案,但是如果是一個很古老的項目,已經做了好幾年的項目了。里面調用復雜,要盡量去避免修改以前的底層方法,也許你為了修改這個bug,就這樣簡單解決了,你可能又會創(chuàng)造多個bug.
那到底還有沒有好的方法去解決了?
Sure,solve it easy .但是工作經驗不足的人很少會一下想到,只會用前面的辦法草草解決問題,不管三七二十一。
而我采用了一種比較笨的方法,而且還存在一定問題,使用了setTimeOut定時器執(zhí)行一次,但是問題想必大家都知道,誰知道這個Ajax會執(zhí)行多久了,還好有大神指導了下我,
還記得對數(shù)組排序嗎,說道這個,也許你會好奇,這與數(shù)組排序有啥關系。下面會告訴你答案
代碼說明一切:
function main(){ var temp=ajax2Callback; ajax2Callback=function(){ temp(); ajax1(data,callback); } aa(data); ajax2Callback=temp; } function aa(val){ var data=val+"";//這里是對傳入數(shù)據(jù)進行修改,封裝,當然這里是隨便寫的 ajax2(data,ajax2Callback); } function ajax2Callback(){ console.log("=====回調函數(shù)ajax2Callback()執(zhí)行========"); console.log("=====這里正在執(zhí)行ajax執(zhí)行完畢后必須執(zhí)行的操作========"); }
看出來沒,是不是很有趣,沒有修改最低層的方法,僅僅修改了main方法,是不是很像數(shù)組排序里的當我們比較兩個值大小時,不管你用冒泡排序,還是快速排序,是不是都設置了一個臨時變量去存儲值。當然排序比較大小時,你可以沒必要設置臨時變量,僅僅用一個^運算符去做賦值比大小,甚至你可以偷懶到直接調用系統(tǒng)的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請求執(zhí)行返回先后的問題”的內容了,經過本文的學習后,相信大家對如何解決多個Ajax請求執(zhí)行返回先后的問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián)網站建設公司,,小編將為大家推送更多相關知識點的文章,歡迎關注!
本文名稱:如何解決多個Ajax請求執(zhí)行返回先后的問題-創(chuàng)新互聯(lián)
文章鏈接:http://jinyejixie.com/article32/decipc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站設計、云服務器、微信公眾號、定制網站、外貿建站、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)