【问题标题】:Uncaught Error: InvalidStateError: DOM Exception 11 with AJAX?未捕获的错误:InvalidStateError:带有 AJAX 的 DOM 异常 11?
【发布时间】:2013-03-13 23:35:44
【问题描述】:

我正在运行一个简单的 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 的控制台出现错误:

未捕获的错误:InvalidStateError:DOM 异常 11

它指向这一行:

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

我做错了什么?

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

    错误:

    Uncaught Error: InvalidStateError: DOM Exception 11
    

    表示您在错误状态下请求状态。在 readyState 为 0 或 1 期间 conn.status 不可用。

    你的问题是当 readyState 为 0 和 1 时你使用 conn.status。

    您需要添加代码以确保在不适当的状态下不会查询 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

      【讨论】:

      • 哇,谢谢你的链接,我找不到类似的东西,哈哈。事实证明你是对的,在我做任何事情之前我需要确保'readyState == 4'所以我只是在所有东西周围包裹了一个巨大的if函数并且错误消失了! :D
      猜你喜欢
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多