2011-09-02 49 views
2

我在嵌入式設備上使用XMLHttpRequest,該API提供API的非標準擴展,以便在請求完成後手動清理資源。我可以保證onreadystatechange最終總是會被調用readyState == 4嗎?

我可以假設,對於所有情況(成功或否則,例如404,DNS查找失敗等),調用send()方法最終會導致我的onreadstatechange處理程序被調用readyState == 4?

或者換句話說,假設這個實現的XHR在所有其他方面的行爲與標準瀏覽器的行爲類似,那麼下面的代碼是否總是導致被調用的destroy()方法?

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     callback(xhr.responseText); 
     if (xhr.destroy) { // must call this to prevent memory leak 
      xhr.destroy(); 
     } 
    }  
}; 
xhr.open(method, url, true); 
xhr.send(null); 

回答

3

在某些情況下,要求abort()當例如,狀態可以在UNSENT(3.6.5)終止。

即使在「正常」操作期間,如果發生錯誤並引發異常,則狀態可能會終止於DONE以外的其他位置。

閱讀the spec's section on states瞭解更多信息。

相關問題