關於ajax請求的一些問題(面試)
1.ajax預設的請求是同步還是非同步?
ajax中一般是根據async的值不同分為同步(async=false)和非同步(async=true)兩種執行方式,在w3c的教程中推薦使用非同步執行。
2.ajax中什麼時候使用同步,什麼時候使用非同步?
這個問題的思路是:什麼是同步請求,什麼是非同步請求,然後才是使用場景的分析
(1)什麼是同步請求:
同步請求即是當前傳送請求後,瀏覽器什麼都不能做,必須等到請求完成返回資料之後,才執行後續的程式碼。也就是說,當js程式碼載入到當前ajax的時候會把頁面裡所有的程式碼停止載入,頁面處於一個假死狀態,當這個ajax執行完畢後才會繼續執行其他程式碼,頁面解除假死狀態。
(2)什麼是非同步請求:
非同步請求就是當發出請求的同事,瀏覽器可以繼續做任何事,Ajax請求並不會影響頁面的載入與使用者的操作,相當於是在兩條平行線上,互不影響。
(3)同步和非同步有什麼不同
非同步:在非同步模式下,當我們使用ajax傳送完請求後,可能還有程式碼需要執行,這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,這時,所有包含ajax請求程式碼的函式中剩餘程式碼將繼續執行,如果我們是將請求結果交由另一個js函式去處理的,那麼這個時候就好比兩條執行緒同時執行一樣。
同步:在同步模式下,當我們使用ajax傳送完請求後,後續還有程式碼需要執行,我們同樣將伺服器響應交由另一個函式去執行,但是這時,在伺服器沒有響應或者處理結果的js函式還沒有處理完成return時,包含請求程式碼的函式的剩餘程式碼是 不能執行的,就像一個單執行緒,請求發出去後就進入阻塞狀態,直到解除阻塞狀態,餘下的程式碼才會繼續執行。
同步適用的一些情況:
在一些狀況下,只有執行完ajax這步,拿到資料後再進行執行下一步操作,這是非同步無法實現的。
在我們傳送ajax請求後,還需要繼續處理伺服器的響應結果,如果我們這時將結果的處理交由另一個函式進行處理,這時就可能出現,非同步請求的響應還沒有處理完,函式已經執行了return語句,這時將導致return的結果為空字串
(4)如何設定ajax為同步
只需要把async的value設定為false就行
注意:
1.如果專案中在做一項操作前要進行ajax驗證,無論是同步還是非同步,都必須在驗證通過後,方可進行其他操作
2.熟練應用error引數,關注返回來的的異常資訊,從而判斷程式的錯誤位置。
3.專案前端做驗證,後端也做響應的認證;前端做驗證是為了減少伺服器壓力和增加使用者體驗,後端做驗證才是為了安全