我正在用PHP和jQuery进行一次基于长轮询(类似这样)的聊天。一旦在浏览器中下载了整个页面,一个函数就会向后端发出一个有一定超时限制的长轮询请求,当数据来自后端时,它会再次发出长轮询请求。如果出现任何错误,它将再次发出新的长轮询请求。
问题:通过firebug分析跟踪,我注意到有时长轮询请求会运行3或4次,但它不应该运行。每页应该只有一个长轮询请求在运行。
然而,代码运行得很好。但是长轮询请求重复是个问题。
function listen_for_message(){
// this functions is makes the long-polling request
$.ajax({
url: "listen.php",
timeout:5000,
success: function(data) {
$('#display').html(data);
listen_for_message();
}
error: function() {
setTimeOut("listen_for_message()",2000); // if error then call the function after 2 sec
}
});
return;
}
尝试手动终止请求:
var connection;
function longpoll() {
if(connection != undefined) {
connection.abort();
}
connection = $.ajax({
...
complete: function() {
longpool();
}
});
}
它也可能是一个Firefox/firebug问题(显示中止的连接正在运行),请在Chrome中进行测试。
更新:
"仅在Firefox 3.0+中,脚本和JSONP请求不能因超时而取消;即使脚本在超时后到达,它也会运行。"http://api.jquery.com/jQuery.ajax/