aJax同步和異步


AJAX中根據async的值不同分為同步(async = false)和異步(async = true)

$.ajax({ 

        type: "post", 

       url: "path", 

       cache:false, 

       async:false, 

        dataType: ($.browser.msie) ? "text" : "xml", 

         success: function(xmlobj){ 

                      function1(){};

        } 

});

 function2(){};

默認情況下async是true

一.什么是同步請求:(false)

       同步請求即是當前發出請求后,瀏覽器什么都不能做,必須得等到請求完成返回數據之后,才會執行后續的代碼,相當於是排隊,前一個人辦理完自己的事務,下一個人才能接着辦。也就是說,當JS代碼加載到當前AJAX的時候會把頁面里所有的代碼停止加載,頁面處於一個假死狀態,當這個AJAX執行完畢后才會繼續運行其他代碼頁面解除假死狀態(即當ajax返回數據后,才執行后面的function2)。 

二.什么是異步請求:(true)
       異步請求就當發出請求的同時,瀏覽器可以繼續做任何事,Ajax發送請求並不會影響頁面的加載與用戶的操作,相當於是在兩條線上,各走各的,互不影響。

一般默認值為true,異步。異步請求可以完全不影響用戶的體驗效果,無論請求的時間長或者短,用戶都在專心的操作頁面的其他內容,並不會有等待的感覺。

同步和異步有什么不同:

異步:在異步模式下,當我們使用AJAX發送完請求后,可能還有代碼需要執行。這個時候可能由於種種原因導致服務器還沒有響應我們的請求,但是因為我們采用了異步執行方式,所有包含AJAX請求代碼的函數中的剩余代碼將繼續執行。如果我們是將請求結果交由另外一個JS函數去處理的,那么,這個時候就好比兩條線程同時執行一樣。

同步:在同步模式下,當我們使用AJAX發送完請求后,后續還有代碼需要執行,我們同樣將服務器響應交由另一個JS函數去處理,但是這時的代碼執行情況是:在服務器沒有響應或者處理響應結果的JS函數還沒有處理完成return時,包含請求代碼的函數的剩余代碼是不能夠執行的。就好比單線程一樣,請求發出后就進入阻塞狀態,知道接觸阻塞余下的代碼才會繼續執行。

看以下代碼:

 

var flag=true;
var index=0;
$.ajax({
  url: "",
  success: function(data){
    flag=false;
  
});
while(flag){
  index++;
}
alert(index);
 
最終程序進入了一個死循環
看以下代碼:
 
var flag=true;
$.ajax({
  url: "",
  success: function(data){
    flag=false;
  
});
alert(flag);
 
最終結果是true
js是單線程的,由於執行ajax請求會消耗一定的時間,甚至出現了網絡故障而遲遲得不到返回結果;這時,如果同步執行的話,就必須等到ajax返回結果以后才能執行接下來的代碼,如果ajax請求需要1分鍾,程序就得等1分鍾。如果是異步執行的話,在等在server端返回的這個過程中,前台會會繼續執行ajax塊后面的腳本,直到server端返回正常的結果才會執行success,這時候執行的是兩個線程,ajax塊發出請求后一個線程和ajax塊后面腳本
var flag=true;
var index=0;
$.ajax({
  url: "",
  async:false,
  success: function(data){
    flag=false;
  
});
while(flag){
  index++;
}
alert(index);
最終結果是0
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM