Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AJAX长轮询不';t保持连接打开_Php_Javascript_Jquery_Ajax_Long Polling - Fatal编程技术网

Php AJAX长轮询不';t保持连接打开

Php AJAX长轮询不';t保持连接打开,php,javascript,jquery,ajax,long-polling,Php,Javascript,Jquery,Ajax,Long Polling,在过去的两天里,我一直在努力让这一切顺利进行。它执行一次,但在初始加载后无法继续更新。该功能不会自动更新,30秒后也不会重新启动。代码对我来说似乎很好,但很明显,我对长轮询的了解存在一些差距,这导致了它无法工作。如果有人有时间的话,如果你能仔细梳理一下,告诉我我做错了什么,我将不胜感激。非常感谢您的帮助,谢谢 JavaScript/jQuery function poll(pid){ var dataString = 'pid=' + pid; $.ajax({type: 'GE

在过去的两天里,我一直在努力让这一切顺利进行。它执行一次,但在初始加载后无法继续更新。该功能不会自动更新,30秒后也不会重新启动。代码对我来说似乎很好,但很明显,我对长轮询的了解存在一些差距,这导致了它无法工作。如果有人有时间的话,如果你能仔细梳理一下,告诉我我做错了什么,我将不胜感激。非常感谢您的帮助,谢谢

JavaScript/jQuery

function poll(pid){
    var dataString = 'pid=' + pid;
    $.ajax({type: 'GET', url: 'http://localhost:8888/mysite/execs/vote_count.php', data: dataString, async: true, cache: false, success: function(data){

 var post = $('#' +pid);
    var post_children = post.children();
    var upvotes = post_children.find('.upvotes');
    var downvotes = post_children.find('.downvotes');

downvotes.text("-" + data.downvotes);
upvotes.text("+" + data.upvotes);

    }, dataType: "json", complete: poll, timeout: 30000 });
};

$(".post").each(function(){
poll($(this).attr("id"));
});
PHP(vote_count.PHP)


我认为您遇到的主要问题是假设complete:poll将使用当前调用中传入的参数pid。试试这个

function poll(pid){
    var dataString = 'pid=' + pid;
    $.ajax({type: 'GET', 
        url: 'http://localhost:8888/mysite/execs/vote_count.php', 
        data: dataString, 
        async: true, 
        cache: false, 
        success: function(data){
            var post = $('#' +pid);
            var post_children = post.children();
            var upvotes = post_children.find('.upvotes');
            var downvotes = post_children.find('.downvotes');

            downvotes.text("-" + data.downvotes);
            upvotes.text("+" + data.upvotes);
        }, 
        dataType: "json", 
        complete: function(xhr, status){
            setTimeout(function(){poll(pid);}, 30000);
        }, 
        timeout: 30000 
    });
}

$(".post").each(function(){
    poll($(this).attr("id"));
});

所说的,如果你有很多帖子正在检查更新,你可能会考虑捆绑这些调用并每30秒调用一次页面(并返回一个帖子更新的数组),而不是每30页每页一次。(我的额外两分钱。)


编辑:添加了提到的超时。第一次就忘了。

我想一旦你收到回复。。浏览器不会也不应该保持连接打开。。而且这在很大程度上取决于您使用的浏览器和发送的标题。。我不太喜欢PHP,但是。。标头shud包含连接:保持活动状态以保持连接打开。
。 我还进行了各种测试。
1.IE不会保持现有连接打开,但将同时打开2个连接,并将保持第二个连接打开并关闭第一个连接。
2.Chrome表现良好,发送2个请求(一个用于favicon),但保持连接打开。
3.Mozilla只发送一个请求并保持打开状态。

你在用IE9测试这个吗?

你说得对,这是我的主要问题。我很惊讶我没有想到这一点。然而,尽管存在这个问题,我的理解是,这个连接应该保持开放,并创建(似乎)自动更新。否则我可以使用setInterval。然而,即使在最初的30秒内,也没有任何变化。我的PHP有一个星期,但我在javascript中没有看到任何保持连接打开的内容。当AJAX调用超时时,超时所做的就是重写,jQuery每次只为每个帖子调用一次poll函数。这是一个更好、更干净的长池模式我在Chrome上,也在Mac上,它不是双启动窗口,所以即使我想,我也无法在IE9中测试它,除非我把文件转移到我朋友的公司。我的坏…(你能检查一下你从服务器上得到的响应头吗。
function poll(pid){
    var dataString = 'pid=' + pid;
    $.ajax({type: 'GET', 
        url: 'http://localhost:8888/mysite/execs/vote_count.php', 
        data: dataString, 
        async: true, 
        cache: false, 
        success: function(data){
            var post = $('#' +pid);
            var post_children = post.children();
            var upvotes = post_children.find('.upvotes');
            var downvotes = post_children.find('.downvotes');

            downvotes.text("-" + data.downvotes);
            upvotes.text("+" + data.upvotes);
        }, 
        dataType: "json", 
        complete: function(xhr, status){
            setTimeout(function(){poll(pid);}, 30000);
        }, 
        timeout: 30000 
    });
}

$(".post").each(function(){
    poll($(this).attr("id"));
});