2010-02-14 40 views
6

Tôi hiện đang triển khai một loại HTTP Push bằng cách sử dụng tính năng Bỏ phiếu dài cho các trình duyệt không hỗ trợ phản hồi đa phần ajax.Các trình kích hoạt chuyển sang trạng thái "bận" trên yêu cầu Ajax

Tôi phải thừa nhận rằng trong khi phía máy chủ đang làm việc tốt, tôi relativly mới để kết thúc trước javascript phát triển, và do đó có thể thực hiện một số sai lầm rõ ràng

Vấn đề là như sau LongPolling hoạt động hoàn hảo trên IE 6 , 7,8 và Firefox (mặc dù Firefox sử dụng nhiều phần tôi cũng đã thử nghiệm nó với quá trình bỏ phiếu dài) nhưng Safari và Chrome nhập trạng thái "bận" của trình duyệt trong các yêu cầu ajax. (Họ hiển thị các cửa sổ chờ con trỏ, và Safari cũng cho thấy "Đang tải" của nó chỉ trong thanh tiêu đề)

Đây là khóa học không desireable ..

Đây là mã của tôi để làm cuộc thăm dò dài dựa trên Jquery 1.4.1:


function MepSubscribeToQueueLongPoll(name, callback) { 

    var queueUrl = MepGetQueueUrl(name, "LongPoll"); 
    MepLongPollStep(queueUrl, callback); 
}; 

function MepLongPollStep(url, callback) { 
    $.ajax({ 
     url: url, 
     async: true, 
     cache: false, 
     success: function (data,status,request) { 
      callback(request.responseText); 
      MepLongPollStep(url, callback); 
     } 
    }); 
}; 

Lưu ý rằng tôi đang bỏ qua các dữ liệu phân tích chức năng của jquery bằng cách truyền request.responseText trực tiếp đến việc gọi lại vì jquery dường như không hỗ trợ respones ajax nhiều phần dữ liệu và tôi muốn trở thành nhất quán trên các thông tin liên lạc đường dẫn.

Trả lời

3

Vì không có câu trả lời nào tốt hơn, nên tôi tự hỏi liệu thời gian chờ đơn giản có giải quyết được vấn đề không. Xin lỗi để cho một "đoán" thay vì một "Tôi biết điều này là câu trả lời đúng", nhưng điều này thực sự có thể sửa chữa nó .:

function MepLongPollStep(url, callback) { 
    $.ajax({ 
     url: url, 
     async: true, 
     cache: false, 
     success: function (data,status,request) { 
      callback(request.responseText); 
      window.setTimeout(function(){ 
       MepLongPollStep(url, callback); 
      },10); 
     } 
    }); 
}; 
+0

Cảm ơn, tôi dường như biết rất ít về hành vi của trình duyệt, nhưng mẹo của bạn đã được sửa vấn đề trên tất cả các trình duyệt – Gluber

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