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

支付寶加好友偷能量挖發表於2009-07-07

  最近在寫一個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

相關文章