2013-03-13 24 views
7

Używam prostego żądania AJAX:Uncaught Error: InvalidStateError: DOM Exception 11 with 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(); 
} 

Kod działa poprawnie i PHP zwraca poprawną treść. Jednak nie jest to błąd w konsoli Chrome:

Uncaught Error: InvalidStateError: DOM Exception 11

wskazuje na tej linii:

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

Co robię źle?

Odpowiedz

14

Błąd:

Uncaught Error: InvalidStateError: DOM Exception 11 

oznacza, że ​​proszą o statusie w złym stanie. conn.status nie jest dostępna podczas readyState od 0 lub 1.

Twój problem jest używasz conn.status gdy readyState jest 0 i 1.

Trzeba dodać kod, aby upewnić się, że jest conn.status nie zapytano w nieodpowiednich stanach, takich jak to:

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

Następnie twój kod będzie tylko kwerenda conn.status w odpowiednim czasie.

Ref:

why does this piece of js throw a DOM Exception?

2

Spróbuj tego:

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

false sprawia, że ​​żądania synchronicznego true/default jest asynchroniczne.

W twoim przypadku, to nie stawili się true, co oznacza, że ​​właściwości w warunkowej (conn.status === 200 && conn.readyState === 4) nie są dostępne jeszcze. Będą do zakończenia połączenia.

Mam nadzieję, że ci to pomoże.

Również, sprawdź tę dyskusję here.

+1

Wow Dzięki za link nie mogłem znaleźć nic takiego, haha. Okazuje się, że miałeś rację, musiałem się upewnić, że "readyState == 4" zanim zrobiłem cokolwiek, więc po prostu owinąłem ogromną funkcjonalność wokół wszystkiego i błąd zniknął! :RE – bnynn

Powiązane problemy