2013-03-13 12 views
7

未知のエラー:InvalidStateError:AJAXの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は0または1

のreadyStateの時には利用できませんあなたの問題はreadyStateのは、あなたがconn.statusがあることを確認するためのコードを追加する必要があり、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 /デフォルトは非同期です。あなたのケースでは

、あなたの条件(conn.status === 200 && conn.readyState === 4)のプロパティは、まだ利用できないことを意味する、trueをデフォルトです。彼らは呼び出しの後までになります。

うまくいけば、それはあなたを助けます。

また、このディスカッションをチェックアウトhere

+1

うわー感謝。あなたが正しいと判明したので、私は何かをする前に 'readyState == 4'を確認する必要があったので、すべての関数の周りに大きな関数ifをラップし、エラーはなくなりました! :D – bnynn

関連する問題