jquery php长轮询请求问题

时间:2012-01-13 10:49:02

标签: php ajax jquery long-polling

我正在使用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;
}

1 个答案:

答案 0 :(得分:1)

尝试terminate requests manualy

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/