7

我正在运行一个简单的 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) {

我究竟做错了什么?

4

2 回答 2

14

错误:

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 。

参考:

为什么这段js会抛出DOM Exception?

于 2013-03-25T19:30:52.037 回答
2

Try this:

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

false makes the request synchronous, true / default is asynchronous.

In your case, it's defaulting to true, which means the properties in your conditional (conn.status === 200 && conn.readyState === 4) aren't available yet. They will be until after the call.

Hopefully that helps you some.

Also, checkout this discussion here.

于 2013-03-13T23:59:02.787 回答