2012-11-13 79 views
2

我正在重新觀看WWDC12關於HTML5高級效果的視頻,並注意到他們使用req.addEventListener("load",callback,true)而不是通常的onreadystatechange使用eventListener或readyStateChange會更好嗎?

加載事件和state=4 status=200的情況有什麼區別?
這是相同的負載事件被解僱或兩個不同的?

+0

相關:http://stackoverflow.com/questions/6783053/xmlhttprequest-is-always-calling-load-event-listener-even-when-response-has-e。從這個答案,我的猜測是'load'在'readyState == 4'時觸發。 'load'事件僅指示*網絡*成功(即,找到服務器),而不是HTTP成功(例如,可能返回HTTP錯誤代碼)。但是,我無法找到詳細說明如何以及何時爲Ajax請求觸發'load'的規範。 – apsillers

回答

0

load事件僅表示請求是網絡成功,不一定是HTTP成功。與Ajax請求總是任一觸發一個load事件或error事件,指示網絡交易的成功或失敗(作爲Progress Events規範的一部分):

  • error事件觸發時,網絡抓取失敗,因爲到服務器關閉或在不可訪問的域上(即,請求被同源策略阻止)。

  • 否則,無論返回的HTTP代碼如何,load都會觸發。

loaderror事件總是在最後大火,在最後readstatechange事件已觸發,所以你可以肯定的是,loaderror回調與xhr.readyState == 4xhr.status設置爲正確的HTTP響應代碼運行。

相關問題