2013-03-13 32 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

相关问题