我正在与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;
}
发布于 2012-01-13 19:04:51
var connection;
function longpoll() {
if(connection != undefined) {
connection.abort();
}
connection = $.ajax({
...
complete: function() {
longpool();
}
});
}
这也可能是Firefox/firebug的问题(显示正在运行的连接中止),在Chrome中测试它。
更新:
“仅在Firefox中,脚本和3.0+请求不能通过超时取消;即使脚本在超时后到达,它也会运行。”http://api.jquery.com/jQuery.ajax/
https://stackoverflow.com/questions/8849369
复制相似问题