2011-08-01 3 views
7

Tôi có một đoạn Javascript mà tôi cần để gỡ lỗi:Vấn đề với các giá trị XMLHttpRequest.DONE?

var httpRequest = new XMLHttpRequest(); 
httpRequest.onreadystatechange = function() { 
    if (this.readyState === XMLHttpRequest.DONE) { 
     if (this.status === 200) { 
      success = true; 
     } 
    } 
}; 

Đẩy mạnh thông qua trên Chrome và Firefox, tôi đã phát hiện ra rằng người đầu tiên "nếu" là không. Tôi có thể thấy rằng "this.readyState" được đặt thành "1", được đánh giá bởi thông số W3C có nghĩa là "MỞ". Di chuột qua phân đoạn ".DONE" trong Firebug hiển thị nó dưới dạng không xác định thay vì "4".

http://www.w3.org/TR/XMLHttpRequest/#states

Có vấn đề gì trong Firefox và Chrome nhờ đó các giá trị này không được hỗ trợ?

Cảm ơn trước!

+0

đôi khi nó hoạt động, đôi khi nó không, trong cùng firefox, đôi khi httpRequest.DONE hoạt động nhưng không XMLHttpRequest.DONE, lạ –

Trả lời

8

Bạn nên kiểm tra readyState dựa trên một trong các giá trị số, 4 trong trường hợp của bạn.

+0

Tuyệt vời, đó là sắp xếp nó. Cảm ơn rất nhiều! – MeanwhileInHell

+5

Một lưu ý nhỏ: 'XMLHttpRequest.DONE' * nên * giữ giá trị số '4', nhưng nó không được triển khai trong IE8 và dưới đây. – Blaise

5

Một số trình duyệt không biết thuộc tính XMLHttpRequest.Done, vì vậy bạn nên kiểm tra nó như sau trước 'if'.

var DONE = (typeof XMLHttpRequest.Done !== 'undefined') ? XMLHttpRequest.Done : 4; 
+1

Vui lòng giải thích (trong câu trả lời của bạn) cách này trả lời câu hỏi của OP. Vì nó, đây chỉ là một đoạn mã mà không có nhiều ngữ cảnh. –