2010-02-14 170 views
6

我目前正在對不支持多部分ajax響應的瀏覽器實施一種使用長輪詢的HTTP推送。在Ajax請求中進入「繁忙」狀態的瀏覽器

我不得不承認,在服務器端工作正常,我是relativly新的前端JavaScript開發,因此可能已經取得了一些明顯的錯誤

的問題如下LongPolling完美的作品在IE 6 ,7,8和Firefox(儘管Firefox使用多部分,我也用長輪詢進行了測試),但Safari和Chrome在ajax請求期間輸入 瀏覽器處於「繁忙」狀態。 (他們表現出窗口等待光標,和Safari也顯示在標題欄中的「裝入」指示符)

這當然不是desireable的..

這裏是我的代碼做基於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); 
     } 
    }); 
}; 

注意,我繞過數據直接傳遞request.responseText回調解析的jQuery功能因爲jQuery似乎並不支持多AJAX的階躍響應,我想成爲橫跨通信一致路徑。

回答

3

由於沒有更好的答案已經上前,我不知道是否一個簡單的超時會解決問題。很抱歉給一個「猜測」,而不是「我知道這是真實的答案」,但這可能實際上修復它:

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

謝謝,我似乎知道一點關於瀏覽器的行爲,但你的小費固定所有瀏覽器都存在這個問題 – Gluber 2010-02-14 05:15:35