首頁 >web前端 >前端問答 >ajax預設是異步請求嗎

ajax預設是異步請求嗎

WBOY
WBOY原創
2022-07-01 16:59:493419瀏覽

ajax預設是非同步請求;ajax中可以根據async值的不同來判斷是否是非同步請求,若async的值為false,則表示ajax請求為同步,若async的值為true,則表示ajax請求為異步,而預設情況下async的值是“true”,因此ajax預設為非同步請求。

ajax預設是異步請求嗎

本文操作環境:windows10系統、javascript1.8.5&&html5版、Dell G3電腦。

ajax預設是異步嗎

ajax預設是非同步提交;

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

ajax 預設為非同步請求,即 async:true,可以透過設定參數 asycn:false 到使其同步

$.ajax({
                                        url: 'www.test.com/test/test',
                                        type: 'POST',
                                        data: {name:"test"}
                                        async: false,
                                        error: function() {
                                            console.log('error');
                                        },
                                        success: function(resp) {
                                            console.log('success');
                                        }
                                    });

注意:如果你有這種操作。在呼叫ajax 之前寫了一個 flag = false; 但是在ajax 的success 回調中 設定 flag = true 之類的操作,在ajax 非同步狀態下,是無法得到想要的結果的。

因為ajax 預設是異步,等你執行後面的操作完成之後,有可能才 執行回呼 flag = true 操作! !

擴充知識:

AJAX怎麼實作同步請求?

ajax請求我們分成同步請求和非同步請求,但是預設的都是非同步請求,那麼,當我們想要用ajax同步請求時,我們該如何去實現這個同步請求呢?接下來的這篇文章就來跟大家介紹一下關於ajax同步請求的實作方式,有需要的朋友可以參考一下,希望會對你有幫助。

首先我們應該知道同步是單一的線程,程式碼是按照順序執行的,當執行到js程式碼加載到當前的同步ajax請求的時候,頁面的所有其他程式碼停止加載,頁面處於假死狀態,直到該請求執行完畢,才會執行繼續執行其他請求。

其次我們應該知道ajax中根據async的值不同分為同步和非同步兩種請求方式,當async的值為true時是非同步請求方式,相反的,當async的值為false時是同步請求方式,所以對於實作ajax同步請求只需要將async的值設為false就可以了。

$.ajax(
 
      type:“POST”/“GET”
 
      url:"",
 
      data:{},
 
      dataType:"json",
 
      async:false,  //同步
 
     success:function(response){
 
           }     
 
   );

Ajax同步和非同步請求有什麼區別以及使用場景有哪些?

理解1:

AJAX中根據async的值不同分為同步(async = false)和非同步(async = true)兩種執行方式;在W3C的教程中推薦使用非同步執行;

下面來區別一下同步和非同步有什麼不同:

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

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

如何選同步還是非同步模式?要回答這個問題,我們可以透過下面可能出現的問題來回答:

我們在發送AJAX請求後,還需要繼續處理伺服器的回應結果,如果這時我們使用非同步請求模式同時未將結果的處理交由另一個JS函數處理。這時就有可能發生這種情況:非同步請求的回應還沒有到達,函數已經執行完了return語句了,這時將導致return的結果為空字串。

理解2:

同步: 發送一個請求,等待返回,然後再發送下一個請求

非同步: 發送一個請求,不等待返回,隨時可以再發送下一個請求

同步可以避免出現死鎖,讀臟數據的發生,一般共享某一資源的時候用,如果每個人都有修改權限,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。

非同步則是可以提高效率了,現在cpu都是雙核,四核,非同步處理的話可以同時做多項工作,當然必須保證是可以並發處理的。

同步和非同步最大的差別就在於。一個需要等待,一個不需要等待。

例如發短信,就是一個非同步例子。發起者不關心接收者的狀態。不需要等待接收者的回傳訊息,則可以進行下一次發送。

電話,就是一個同步例子。發起者需要等待接收者,接通電話後,通訊才開始。需要等待接收者的回傳訊息

而我們平常經常討論的同步問題多發生在多執行緒環境中的資料共享問題。即當多個執行緒需要存取同一個資源時,它們需要以某種順序來確保該資源在某一特定時刻只能被一個執行緒所訪問,如果使用非同步,程式的運行結果將不可預料。因此,在這種情況下,就必須對資料進行同步,即限制只能有一個進程存取資源,其他執行緒必須等待。

實現同步的機制主要有臨界區、互斥、信號量和事件

臨界區:透過對多執行緒的串列化來存取公共資源或一段代碼,速度快,適合控制資料存取。在任意時刻只允許一個線程對共享資源進行訪問,如果有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其他試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被釋放後,其他執行緒才可以搶佔。

互斥量:採用互斥物件機制。只有擁有互斥物件的執行緒才有存取公共資源的權限,因為互斥物件只有一個,所以能確保公共資源不會同時被多個執行緒存取。互斥不僅能實現同一應用程式的公共資源安全共享,還能實現不同應用程式的公共資源安全共享 .互斥量比臨界區複雜。因為使用互斥不僅能夠在同一應用程式不同執行緒中實現資源的安全共享,而且可以在不同應用程式的執行緒之間實現對資源的安全共享。

信號量:它允許多個執行緒在同一時刻存取相同資源,但是需要限制在同一時刻存取此資源的最大執行緒數目 。信號量物件對執行緒的同步方式與前面幾種方法不同,訊號允許多個執行緒同時使用共享資源,這與作業系統中的PV操作相同。它指出了同時存取共享資源的線程最大數目。它允許多個執行緒在同一時刻存取相同資源,但是需要限制在同一時刻存取此資源的最大執行緒數目。

事件:透過通知操作的方式來保持執行緒的同步,也可以方便實現多個執行緒的優先權比較的操作 。

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn