Ajax中什麼時候用同步,什麼時候用非同步?

2022-07-16 04:36:10 字數 1311 閱讀 8806

ajax中根據async的值不同分為同步(async = false)和非同步(async = true)兩種執行方式;在w3c的教程中推薦使用非同步執行;

$.ajax(;

function2(){};

預設情況下async是true

一.什麼是同步請求:(false)

同步請求即是當前發出請求後,瀏覽器什麼都不能做,必須得等到請求完成返回資料之後,才會執行後續的**,相當於是排隊,前乙個人辦理完自己的事務,下乙個人才能接著辦。也就是說,當js**載入到當前ajax的時候會把頁面裡所有的**停止載入,頁面處於乙個假死狀態,當這個ajax執行完畢後才會繼續執行其他**頁面解除假死狀態(即當ajax返回資料後,才執行後面的function2)。 

二.什麼是非同步請求:(true)

非同步請求就當發出請求的同時,瀏覽器可以繼續做任何事,ajax傳送請求並不會影響頁面的載入與使用者的操作,相當於是在兩條線上,各走各的,互不影響。

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

下面來區別一下同步和非同步有什麼不同:

非同步:在非同步模式下,當我們使用ajax傳送完請求後,可能還有**需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含ajax請求**的函式中的剩餘**將繼續執行。如果我們是將請求結果交由另外乙個js函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣。

同步:在同步模式下,當我們使用ajax傳送完請求後,後續還有**需要執行,我們同樣將伺服器響應交由另乙個js函式去處理,但是這時的**執**況是:在伺服器沒有響應或者處理響應結果的js函式還沒有處理完成return時,包含請求**的函式的剩餘**是不能夠執行的。就好比單執行緒一樣,請求發出後就進入阻塞狀態,知道接觸阻塞餘下的**才會繼續執行。

有人說:既然非同步這麼好,那全部都用非同步好了,同步存在還有什麼意義?

那麼,同步適用於一些什麼情況呢?

我們可以想一下,同步是一步一步來操作,等待請求返回的資料,再執行下一步,那麼一定會有一些情況,只有這一步執行完,拿到資料,通過獲取到這一步的資料來執行下一步的操作。這是非同步沒有辦法實現的,因此同步的存在一定有他存在的道理。

如何選擇同步還是非同步模式?要回答這一問題,我們可以通過下面可能出現的問題來回答:

我們在傳送ajax請求後,還需要繼續處理伺服器的響應結果,如果這時我們使用非同步請求模式同時未將結果的處理交由另乙個js函式進行處理。

這時就有可能發生這種情況:非同步請求的響應還沒有到達,函式已經執行完了return語句了,這時將導致return的結果為空字串。

在Ajax中什麼時候用GET什麼時候用POST?

當我們有大量資料要傳送時最好的辦法是一次發出多個只傳遞少量資訊的ajax呼叫時。如果你正用乙個ajax呼叫傳送大量資料,那麼最好是結束這種做法,因為這樣做並不能節約時間。因此,需要傳送大量資料能成為我們在get和post之間猶豫不決的理由嗎?這兩個方法都是為不同的目的而設計的,兩者的不同也在於其使用...

ajax該什麼時候用

第 一 請求的提交是為了頁面資料的顯示,這時候使用者一般不希望看到頁面的重新整理,是使用ajax的乙個最佳時候。第二 如果請求提交後,使用者能從頁面感覺到提交結果,這時候,也最好不要有頁面重新整理,推薦使用ajax技術。第三 如果請求提交後,使用者不能從頁面感覺到提交動作,如絕大多數時候的資料的增加...

什麼時候用exists 什麼時候用in

in not in exists not exists 使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起 待子查...