2010-04-12 40 views
5

Tôi đang phát xung quanh một chút với XmlHttpRequestObjects thô + Comet Long Polling. (. Thông thường, tôi muốn chúng ta hãy GWT này hay cách khác xử lý khuôn khổ này đối với tôi, nhưng tôi muốn tìm hiểu thêm về nó)Sao chổi (bỏ phiếu dài) và trạng thái XmlHttpRequest

tôi đã viết đoạn mã sau:

function longPoll() { 
    var xhr = createXHR(); // Creates an XmlHttpRequestObject 
    xhr.open('GET', 'LongPollServlet', true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 

     if (xhr.status == 200) { 
      ... 
     } 

     if (xhr.status > 0) { 
      longPoll(); 
     } 
    } 
    } 
    xhr.send(null); 
} 

... 
<body onload="javascript:longPoll()">... 

tôi quấn longPoll() cuộc gọi trong một câu lệnh if kiểm tra status > 0, bởi vì tôi gặp phải, khi tôi rời khỏi trang (bằng cách duyệt một nơi khác hoặc bằng cách tải lại nó), một cuộc gọi sao chổi không cần thiết cuối cùng sẽ được gửi. [Và trên Firefox, nó thậm chí còn gây ra vấn đề nghiêm trọng khi thực hiện tải lại trang, vì một lý do tôi không hoàn toàn hiểu được nêu ra.]

Câu hỏi: Có phải đó làstatus kiểm tra cách chính xác để xử lý vấn đề này, hoặc là có một giải pháp tốt hơn?

+0

Bạn không thể chỉ cần nhìn vào bất kỳ thực hiện hiện tại, ví dụ GWT như bạn đã đề cập, jquery, vv? – fig

+0

@ fig-gnuton: Tôi không chắc chắn, nếu nó thực sự dễ dàng để làm theo mã javascript được tạo ra (tôi không phải là một guru javascript ...) –

+0

Nếu bạn biết đủ để có thể chơi với XHR thô, bạn sẽ không có vấn đề khi nhìn vào Jquery hoặc các libs khác. Họ có các phiên bản nguồn được nhận xét đầy đủ. – fig

Trả lời

3

Câu trả lời hiện tại của tôi - cho đến khi được chứng minh là - giải pháp đó là chính xác.

0

Tôi thích sự đơn giản của vòng lặp này .... tôi nghĩ rằng kịch bản phía máy chủ phải ngủ hoặc vòng lặp ít nhất cho đến khi nó nhận được dữ liệu mới trước khi được xem xét bỏ phiếu dài mặc dù đây chỉ là bình thường bỏ phiếu. tôi cũng sẽ thêm một cái gì đó để kiểm tra xem các reques thất bại mặc dù. gói rằng trong một thử bloch bắt nên làm các thủ thuật

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