2013-03-13 34 views
7

我運行一個簡單的AJAX請求:未捕獲的錯誤:InvalidStateError:DOM異常11與AJAX?

function makePages(num) { 

    var conn = new XMLHttpRequest(); 

    conn.onreadystatechange = function() { 
     if (conn.status === 200 && conn.readyState === 4) { //error here 
      $('#oldPost').before(conn.responseText); 
     } 
     else{ 
      return 
     } 
    } 

    conn.open('GET','includes/feedExtra.php?num=' + num); 
    conn.send(); 
} 

代碼運行正常和PHP返回正確的內容。然而,在Chrome的控制檯錯誤:

Uncaught Error: InvalidStateError: DOM Exception 11

它指向這一行:

if (conn.status === 200 && conn.readyState === 4) {

我在做什麼錯?

回答

14

錯誤:

Uncaught Error: InvalidStateError: DOM Exception 11 

意味着你所要求的在錯誤的狀態的狀態。 conn.status的readyState的過程中無法使用0或1

您的問題是,你正在使用conn.status當readyState爲0和1

您需要添加代碼,以確保conn.status是沒有在不適當的狀態下查詢,像這樣:

if(conn.readyState === 4 && conn.status === 200){ 

然後你的代碼將只在適當的時候查詢conn.status。

編號:

why does this piece of js throw a DOM Exception?

2

嘗試這種情況:

conn.open('GET','includes/feedExtra.php?num=' + num, false); 

false發出請求同步,true /默認是異步的。

在你的情況下,它默認爲true,這意味着你的條件(conn.status === 200 && conn.readyState === 4)的屬性不可尚未。他們將在電話會議之後。

希望這可以幫助你一些。

此外,結帳討論here

+1

哇感謝您的鏈接我找不到這樣的事情,哈哈。事實證明,你是對的,我需要確保'readyState == 4'之前我做了任何事情,所以我只是包裝了一個巨大的if函數,並且錯誤消失了! :d – bnynn 2013-03-14 00:04:00

相關問題