亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ajax的send同步問題

ajax的send同步問題

千萬里不及你 2018-08-12 18:38:10
 var xhr = new XMLHttpRequest();     xhr.open("get","1.html",false);     xhr.onreadystatechange = function () {        console.log(xhr.readyState)     }     xhr.send();為什么同步就只能輸出4,異步的任務隊列我知道可以輸出2,3,4,但是同步是不是就沒有往任務隊列里面加任務了,但是同步和異步的區別不就是在send這里會等著嗎,在等著的過程中onreadystatechange 不也會觸發嗎
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

是這樣的。

先來看下state的狀態又哪些:

0 UNSENT - open()has not been called yet1 OPENED - send()has not been called yet2 HEADERS_RECEIVED - send() has been called, and headers and status are available3 LOADING Downloading; - responseText holds partial data4 - The operation is complete

如果發送了同步請求,
那么此時(send代碼執行后)瀏覽器會掛起,直到請求體響應完成,然后改變state值,從而觸發下面的代碼:

xhr.onreadystatechange = function () {    console.log(xhr.readyState)
}

由于此時已經請求響應完成,所以狀態直接就是4了。` 換句話說,假如2,3你能監聽的到又怎么樣?

線程阻塞著呢,你能干啥?`

而如果是異步的,在請求真正的完全響應之前,2,3狀態的回調函數會被執行。

另外同步是不建議使用的, 在同步中去監聽onStateChange更是不應該。


查看完整回答
反對 回復 2018-08-12
  • 1 回答
  • 0 關注
  • 701 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號