ajax預設是非同步請求;ajax中可以根據async值的不同來判斷是否是非同步請求,若async的值為false,則表示ajax請求為同步,若async的值為true,則表示ajax請求為非同步,而預設情況下async的值是「true」,因此ajax預設是非同步請求。
本文操作環境:windows10系統、javascript1.8.5&&html5版、Dell G3電腦。
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預設是非同步請求嗎的詳細內容,更多請關注TW511.COM其它相關文章!