2013-03-13 22 views
7

Tôi đang chạy một yêu cầu AJAX đơn giản:Lỗi không bắt buộc: InvalidStateError: DOM ngoại lệ 11 với 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(); 
} 

Mã này chạy một cách chính xác và PHP trả về nội dung chính xác. Tuy nhiên, có một lỗi trong giao diện điều khiển của Chrome:

Uncaught Error: InvalidStateError: DOM Exception 11

nó trỏ tới dòng này:

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

Tôi đang làm gì sai?

Trả lời

14

Lỗi:

Uncaught Error: InvalidStateError: DOM Exception 11 

Có nghĩa là bạn đang yêu cầu trạng thái trong tình trạng sai. conn.status không có sẵn trong readyState 0 hoặc 1.

Vấn đề của bạn là bạn đang sử dụng conn.status khi readyState là 0 và 1.

Bạn cần phải thêm mã để đảm bảo conn.status là không được truy vấn ở các tiểu bang không thích hợp, như sau:

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

Sau đó, mã của bạn sẽ chỉ truy vấn conn.status vào thời điểm thích hợp.

Ref:

why does this piece of js throw a DOM Exception?

2

Hãy thử điều này:

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

false làm cho đồng bộ yêu cầu, true/default là không đồng bộ.

Trong trường hợp của bạn, nó mặc định cho true, có nghĩa là các thuộc tính trong điều kiện (conn.status === 200 && conn.readyState === 4) của bạn không có sẵn chưa. Họ sẽ đến sau cuộc gọi.

Hy vọng rằng sẽ giúp bạn một số.

Ngoài ra, hãy kiểm tra cuộc thảo luận này here.

+1

Wow nhờ các liên kết tôi không thể tìm thấy bất cứ điều gì như thế, haha. Nó chỉ ra rằng bạn đã đúng, tôi cần phải chắc chắn rằng 'readyState == 4' trước khi tôi làm bất cứ điều gì vì vậy tôi chỉ bọc một lớn nếu chức năng xung quanh tất cả mọi thứ và lỗi đã biến mất! : D – bnynn

Các vấn đề liên quan