ajax同步和異步的區別


同步和異步概念

同步: 提交請求 ->服務器進行處理->等待結果(這個期間,你不能做任何事,只有收到服務器的結果后,才可進行其他操作)

異步: 提交請求->服務器處理(這個期間你不用等待服務器的結果,你可去干自己的事情了)->處理完畢

ajax同步、異步

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

  • 異步:

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

(現在的大多數項目,都是使用ajax的異步請求。因為這樣能過避免服務器的檢索給用戶帶來的時間延遲。異步傳輸,總是悄悄進行着,用戶根本不知道這后面都發生了什么事,用戶只要專注着操作瀏覽器界面就好了,這個對於用戶體驗來說,非常好。)
  • 同步:

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

(發完一個請求時,就一直處於等待狀態。比如,你的鼠標一直顯示着轉啊轉哈,直到服務器把數據處理完畢了,再告知瀏覽器現在可以了,你可以操作其他事情了,可是這對於用戶是一個多么痛苦的體驗,為了這個請求,頁面一直無法操作,就像瀏覽器“死機”了一樣 。所以,同步請求最好慎用。)

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

如何選擇同步或者異步

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

這時將導致return的結果為空字符串。不過也有用同步的啦。有的時候,當前請求的結果是下一步請求的前提,只有知道了當前請求的結果,才能知道接下來怎么做。

總結

同步需要等待服務器響應,異步不需要

參考

JavaScript 同步和異步(執行機制)

 
 


免責聲明!

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



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