2011-09-02 50 views
12

我遇到了這個錯誤只在IE9:IE 9的JavaScript錯誤c00c023f

SCRIPT575:無法完成因錯誤c00c023f操作。

錯誤發生在這條線:if ((a.responseXML) && (a.readyState==4)) {

我無法弄清楚,爲什麼發生這種情況,似乎在其他瀏覽器很好地工作。

,這是我的javascript代碼:

var a = new XMLHttpRequest(); 
a.open("GET",'/cust/ajax/getresult.php?qk=nnf87&arg1='+pzid,true); 
a.onreadystatechange = function() { 
    if ((a.responseXML) && (a.readyState==4)) { 
     var N = a.responseXML.getElementsByTagName('result') 
     sequence = N[0].firstChild.data; 
     var SEQ = sequence.split(","); 
     var num = SEQ.length; 
        var sum = 0; 
        for(var n=0;n<num;n++){sum = sum + (SEQ[n]*1);} 
     //document.getElementById("the_number_of").innerHTML = sum; 
     var date = new Date(); 
     date.setTime(date.getTime()+(2*60*60*1000)); 
     document.cookie='cpa_num='+sum+'; expires= '+date.toGMTString()+'; path=/'; 
    } 

} 

回答

18

我不認爲你的請求被中止?一個快速谷歌搜索發現this博客文章。看起來IE9中的一箇中止請求會在嘗試讀取XMLHttpRequest對象的任何屬性時發生此錯誤。

從後,他們與這個錯誤代碼特定的問題可以通過複製:

  • 中止請求創建一個XMLHttpRequest對象
  • 分配一個onreadystatechanged事件處理
  • 執行請求
  • 在應答處理之前

現在您將看到readystatechange處理程序將被調用, 且readystate屬性設置爲'4'。任何嘗試讀取 XmlHttpRequest對象屬性都將失敗。

作者通過在執行手動中止時爲請求分配中止狀態,並在嘗試讀取任何其他屬性之前檢測到它並返回,從而緩解了此問題。儘管如果你正在執行中止操作,這種方法纔會真正起作用。

this WebSync Google Groups post上記錄了類似的問題。邁向討論的盡頭有一個暗示,這個問題只發生

,如果你已經有了標準,IE9渲染 模式都設置

希望指向你在正確的方向。

+0

你好@Matt,我試過你的解決方案,它的工作原理!非常感謝你,我想給你一個投票,但我是新來的,我必須等待聲望15.我必須努力工作!哈哈。再次感謝! – peipei

+0

@peipei我很高興它解決了。歡迎來到StackOverflow! – Matt

2

切換

if ((a.responseXML) && (a.readyState==4)) 

if ((a.readyState==4) && (a.responseXML)) 

由於訂單事宜。它似乎在IE9如果狀態不是4,responseXML和reponseText如果被訪問會產生這個錯誤(我不知道爲什麼...)

+0

這是正確的答案。 – Knu

3

內的readyState == 4套路,包括try和catch類似:

try { 
    var response=xmlHttp.responseText; 
    } 
catch(e) { 
    var response="Aborted"; 
} 

我們發現,這是最成功解決以上。

+0

這適用於我的案例......非常奇怪的問題,很高興它可以像這樣解決並評估響應。 – afreeland

1

我在我的框架中得到這個錯誤。它只在IE中顯示(去圖)。我簡單地裹得像個以下回應:

​​
1

它發生,我與IE9時,我過早地讀了「狀態」屬性(前readyState爲4/DONE)。