ajax預設是同步還是異步

青灯夜游
發布: 2022-01-17 16:18:04
原創
5303 人瀏覽過

ajax預設是非同步提交;AJAX中根據async值的不同分為同步“false”和非同步“true”,而預設情況下async值是true(非同步提交)。這樣做的好處就是能夠透過局部刷新的方式提高使用者的體驗,同時也能節省資源,減少資料庫的壓力。

ajax預設是同步還是異步

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

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(非同步提交)。

改成同步的方法就是將async的預設值改成false,一般都是true或不寫,如果改成false就會失去ajax本身的作用。

一、什麼是同步請求:(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

#【相關教學推薦:AJAX影片教學

以上是ajax預設是同步還是異步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板