2010-08-31 30 views
0

根據此示例http://tomcat.apache.org/tomcat-7.0-doc/aio.html創建了CometServlet。然後我嘗試使用JQuery從它獲取數據。代碼如下:在Tomcat服務器上使用JQuery進行長輪詢的問題

$(function() { 

     $.longPoll = function(url, success, error) { 
     $.ajax({ 
      url : url, 
      success: function(data, status) { 
       $.longPoll(url, success, error); 
       if (success) { 
        success(data, status); 
       } 
      }, 
      error: function(data, status) { 
       $.longPoll(url, success, error); 
       if (error) { 
        error(data, status); 
       } 
      } 
     }); 

    }; 

    $.longPoll("./comet", "", function(data, status) { 
     alert("success:" + data); 
    }, function(data, status) { 
     alert("error:" + data); 
    }); 
}); 

的問題是,成功的功能不會觸發(即使我可以在該數據來自Firebug的控制檯中看到)。我認爲這是因爲服務器沒有關閉響應編寫器,但它是長輪詢的目標:)

有沒有人有任何想法如何解決?

回答

1

您需要覆蓋xhr onreadystatechange以檢查readyState === 3與jQuery .ajax()。例如:

var xhr = $.ajax({}); 
xhr._onreadystatechange = xhr.onreadystatechange; // save original handler 

xhr.onreadystatechange = function() { 
    xhr._onreadystatechange();   // execute original handler 
    if (xhr.readyState === 3) alert('Interactive'); 
}; 
+0

感謝您的回答! 我添加了: beforeSend : function(xhr) { xhr._onreadystatechange = xhr.onreadystatechange; xhr.onreadystatechange = function() { if (xhr.readyState === 3) { alert(this.responseText); } else { xhr._onreadystatechange(); } }; xhr.onprogress = xhr.onreadystatechange; } 我的$ .ajax()請求,但沒有任何更改。對不起,我無法格式化代碼。 – Pavel 2010-08-31 14:29:13