我根据这个例子http://tomcat.apache.org/tomcat-7.0-doc/aio.html创建了一个CometServlet。然后我尝试使用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控制台中看到数据来了)。我认为这是因为服务器没有关闭响应编写器,但它是长轮询的目标:)
有没有人有任何想法如何解决?
答案 0 :(得分:1)
您需要覆盖xhr onreadystatechange
才能使用jQuery readyState === 3
检查.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');
};
答案 1 :(得分:0)
问题解决方案是添加计时器以检查新数据的长轮询流。这里有很好的解释:http://www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm
谢谢大家。