同步和異步概念
同步: 提交請求 ->服務器進行處理->等待結果(這個期間,你不能做任何事,只有收到服務器的結果后,才可進行其他操作)
異步: 提交請求->服務器處理(這個期間你不用等待服務器的結果,你可去干自己的事情了)->處理完畢
ajax同步、異步
AJAX中根據async的值不同分為同步(async = false)和異步(async = true)兩種執行方式;在W3C的教程中推薦使用異步執行;在默認情況下為異步(true)
- 異步:
在異步模式下,當我們使用AJAX發送完請求后,可能還有代碼需要執行。這個時候可能由於種種原因導致服務器還沒有響應我們的請求,但是因為我們采用了異步執行方式,所有包含AJAX請求代碼的函數中的剩余代碼將繼續執行。如果我們是將請求結果交由另外一個JS函數去處理的,那么,這個時候就好比兩條線程同時執行一樣。(異步就是不等待服務端響應,接着執行其他的同步代碼,等待響應回來之后success,error才會執行)
- 同步:
在同步模式下,當我們使用AJAX發送完請求后,后續還有代碼需要執行,我們同樣將服務器響應交由另一個JS函數去處理,但是這時的代碼執行情況是:在服務器沒有響應或者處理響應結果的JS函數還沒有處理完成return時,包含請求代碼的函數的剩余代碼是不能夠執行的。就好比單線程一樣,請求發出后就進入阻塞狀態,知道接觸阻塞余下的代碼才會繼續執行。
(發完一個請求時,就一直處於等待狀態。比如,你的鼠標一直顯示着轉啊轉哈,直到服務器把數據處理完畢了,再告知瀏覽器現在可以了,你可以操作其他事情了,可是這對於用戶是一個多么痛苦的體驗,為了這個請求,頁面一直無法操作,就像瀏覽器“死機”了一樣 。所以,同步請求最好慎用。)
- 一般默認值為true,異步。異步請求可以完全不影響用戶的體驗效果,無論請求的時間長或者短,用戶都在專心的操作頁面的其他內容,並不會有等待的感覺。
如何選擇同步或者異步
我們在發送AJAX請求后,還需要繼續處理服務器的響應結果,如果這時我們使用異步請求模式同時未將結果的處理交由另一個JS函數進行處理。這時就有可能發生這種情況:異步請求的響應還沒有到達,函數已經執行完了return語句了,
這時將導致return的結果為空字符串。不過也有用同步的啦。有的時候,當前請求的結果是下一步請求的前提,只有知道了當前請求的結果,才能知道接下來怎么做。
總結
同步需要等待服務器響應,異步不需要