我正在使用PHP和jQuery进行基于长轮询(类似this)的聊天。一旦整个页面在浏览器中下载,一个函数向后端发出一个长轮询请求,带有一些超时限制,当数据来自后端时再次发出长轮询请求,如果有任何错误,它将再次刷新长轮询请求。
问题:通过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;
}
答案 0 :(得分:1)
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/