AJAX中的同步與非同步程式設計執行機制

2021-09-20 15:36:17 字數 996 閱讀 2737

一、非同步ajax

控制台結果:3 1 2
原因:因為ajax此時是非同步程式設計,只有等主任務佇列執行完console.log(3),才會到等待任務佇列中執行ajax任務。ajax任務一執行,ajax狀態發生變化,此時才觸發監聽事件的方法執行:ajax狀態從1變到2,控制台輸出1;從3變到4,控制台輸出2。
結果:3 1 2
原因:

send()標誌著ajax任務的開始,但此時ajax是非同步程式設計,ajax任務會被放到等待任務佇列中去。

接下來是繫結事件的方法,繫結事件也是非同步程式設計,繫結的方法也被放到了等待任務佇列中。

主任務佇列中的console.log(3)先執行,控制台先輸出3,主任務佇列執行完畢,執行緒空閒。

接著,ajax任務執行,狀態變為2時,變為4時,分別觸發了監聽事件的方法執行,控制台輸出1,2

二、同步ajax

結果:2 3
原因:當ajax任務開始,由於是同步程式設計,主任務佇列在狀態沒有變成4(任務結束)之前一直被這件事占用著,其他事情都做不了。雖然當伺服器把響應頭返回的時候,狀態變為2,觸發了事件onreadystatechange,但是由於主任務佇列沒有完成,被佔著呢,繫結的方法也無法執行...所以只有狀態為4的時候執行一次事件監聽的方法,輸出2。

ajax請求這件事完成了,接下來執行console.log(3),控制台輸出3。

結果:3
原因:綁事件監聽方法之前,ajax同步程式設計已經完成,狀態是4,接下來繫結方法,此時的狀態是4,後續沒有發生狀態的改變,所以繫結的方法沒有機會執行,無任何輸出。

執行到最後console.log(3),控制台輸出3。

所以最終的結果是3。

Ajax同步與非同步

之前一直在寫jquery 的時候遇到ajax載入資料都需要考慮 執行順序問題。最近的專案用了到ajax同步。這個同步的意思是當js 載入到當前ajax的時候會把頁面裡所有的 停止載入,頁面出去假死狀態,當這個ajax執行完畢後才會繼續執行其他 頁面假死狀態解除。而非同步則這個ajax 執行中的時候其...

ajax 同步與非同步

同步是指 傳送方發出資料後,等接收方發回響應以後才發下乙個資料報的通訊方式。使用者填寫所有資訊後,提交給伺服器,等待伺服器的回應 檢驗資料 是一次性的。資訊錯誤又要重新填寫!非同步是指 傳送方發出資料後,不等接收方發回響應,接著傳送下個資料報的通訊方式。當使用者填寫完一條資訊後,該資訊會自動向伺服器...

AJAX同步與非同步

今天來大概說說ajax中的同步與非同步。其實,就我的理解,同步與非同步的區別就是程式執行過程中是否有等待。同步 意思就是js 載入到當前的 ajax時候,會等待ajax 執行完畢後再開始載入其他 非同步 js 是指當載入到 ajax時候,在ajax 執行的同時 也會執行其他 jquery 的asyn...