firefox下XMLHttpRequest重用時nsIXMLHttpRequest.send發生錯誤的解決方案

  最近在寫一個ajax無刷新聊天的程序,在調試程序時,發現firefox下出現了一個嚴重錯誤~~,如下
Error: uncaught exception: [Exception... "Component returned failure code: 0xc1f30001
(NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)"
location: "JS frame :: [URL censored] :: zendGegevens :: line 68" data: no]

  上網找了很多資料,有的說是ajax重用的爲問題【確實重用了ajax對象,使用的是一個數組存儲ajax對象,以便重用】,但是一直沒有找到解決方案。。。。

 

  我在聊天裏面啓動了兩個計時器用來獲取聊天信息和在線用戶列表,時間間隔都是一樣的,這樣有可能兩個計時器同時進入獲取xhr對象的代碼塊中,導致同一個對象被使用。【js沒有加鎖的代碼,如lock和unlock】,在firefox下就出現了上訴的問題了,ie下是沒有問題的。

 

  今天又去google了下,發現了一篇e文,出現的錯誤和我的出現的一樣,於是照着葫蘆畫瓢,更正以後沒在出現上述的問題了,哈哈哈哈~~~happy。

 

  查看e文點擊這裏

  If you take an xmlhttp object that's busy sending and receiving and tell it to send another request, it simply stops doing whatever it does and sends out the new request,Except in Mozilla。

  上面大概意思是當一個xhr對象仍然發送和接受數據的時候,你再使用此對象發出請求,此xhr對象停止任何動作不管它正在幹什麼或者發送新請求。然後在Mozilla瀏覽器裏面就出現上面的錯誤了。【e文不太行,不知道是不是這個意思??!~~~~~】

  解決方案
if (isBusy)
{
xmlhttp.onreadystatechange = function () {}
xmlhttp.abort();
}

Don't ask me why this is necessary, but it works.


下面這句就是不要問我爲什麼這樣做,但是這個確實起作用了。

最後發我更改後的ajax應用程序池,下載點這裏

 


本文來自Web開發網,轉載請標明出處http://www.w3dev.cn/article/20090707/firefox-XMLHttpRequest-Componen-returned-failure-code-0xc1f30001.aspx

發佈了36 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章