jqueryphp长轮询请求问题


jquery php long polling request issue

我正在用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/