1. 程式人生 > >jquery ajax屬性async(同步非同步)

jquery ajax屬性async(同步非同步)

在jquery的ajax中如果我們希望實現同步或者非同步我們可以直接設定async發生為真或假即可true false,下面舉幾個jquery ajax同步和非同步例項

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

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

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

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

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

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

$.ajax()的async引數總是設定成true,這標誌著在請求開始後,其他程式碼依然能夠執行。

如果把這個選項設定成false,這意味著所有的請求都不再是非同步的了,這也會導致瀏覽器被鎖死

當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求後,他會等待在①這個地方,不會去向下執行②,直到①執行完畢

此時依次執行順序為

setp 1

hello

ajaxsetp

2如果async為true 則執行順序為

setp 1

setp 2

hello ajax