Ajax同步和非同步的區別
AJAX中根據async的值不同分為同步(async = false)和非同步(async = true)兩種執行方式;在W3C的教程中推薦使用非同步執行;在預設情況下為非同步(true)
同步和非同步有什麼不同:
- 非同步:
在非同步模式下,當我們使用AJAX傳送完請求後,可能還有程式碼需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含AJAX請求程式碼的函式中的剩餘程式碼將繼續執行。如果我們是將請求結果交由另外一個JS函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣。
- 同步:
在同步模式下,當我們使用AJAX傳送完請求後,後續還有程式碼需要執行,我們同樣將伺服器響應交由另一個JS函式去處理,但是這時的程式碼執行情況是:在伺服器沒有響應或者處理響應結果的JS函式還沒有處理完成return時,包含請求程式碼的函式的剩餘程式碼是不能夠執行的。就好比單執行緒一樣,請求發出後就進入阻塞狀態,知道接觸阻塞餘下的程式碼才會繼續執行。
- 一般預設值為true,非同步。非同步請求可以完全不影響使用者的體驗效果,無論請求的時間長或者短,使用者都在專心的操作頁面的其他內容,並不會有等待的感覺。
如何選擇同步或者非同步
我們在傳送AJAX請求後,還需要繼續處理伺服器的響應結果,如果這時我們使用非同步請求模式同時未將結果的處理交由另一個JS函式進行處理。這時就有可能發生這種情況:非同步請求的響應還沒有到達,函式已經執行完了return語句了,這時將導致return的結果為空字串。