AJAX的同步重新整理與非同步重新整理
阿新 • • 發佈:2018-12-22
之前一直在寫JQUERY程式碼的時候遇到AJAX載入資料都需要考慮程式碼執行順序問題。最近的專案用了到AJAX同步。這個同步的意思是當JS程式碼載入到當前AJAX的時候會把頁面裡所有的程式碼停止載入,頁面出去假死狀態,當這個AJAX執行完畢後才會繼續執行其他程式碼頁面假死狀態解除。
而非同步則這個AJAX程式碼執行中的時候其他程式碼一樣可以執行。
jquery的async:false,這個屬性
預設是true:非同步,false:同步。
$.ajax({ type: "post", url: "path", cache:false, async:false, dataType: ($.browser.msie) ? "text" : "xml", success: function(xmlobj){ } });
有了這個屬性可以相對的減少程式碼執行書序問題,但是如果用的太多,頁面假死次數太多。這樣反而導致使用者體驗不佳~!
在這裡,async預設的設定值為true,這種情況為非同步方式,就是說當ajax傳送請求後,在等待server端返回的這個過程中,前臺會繼續 執行ajax塊後面的指令碼,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個執行緒,ajax塊發出請求後一個執行緒 和ajax塊後面的指令碼(另一個執行緒)例:
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
在上例中,當ajax塊發出請求後,他將停留function1(),等待server端的返回,但同時(在這個等待過程中),前臺會去執行function2(),也就是說,在這個時候出現兩個執行緒,我們這裡暫且說為function1() 和function2()。
當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求後,他會等待在function1()這個地方,不會去執行function2(),知道function1()部分執行完畢