使用jQuery和PHP进行长轮询

3

所以,我一直在尝试使用jQuery库和PHP进行长轮询。我这样做是为了将来可以创建某种实时通知系统。但是,我现在的代码并没有真正起作用。

index.php

<html>
<head>
    <title>Long Polling</title>
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.6.2.min.js'></script>
    <script type='text/javascript'>
        $(document).ready(function() {
            getData();
        });

        function getData() {
            $.ajax({
                type: "POST",
                url: "ajax.php",
                async: true,
                timeout: 50000,
                data: "get=true",
                success: function(data) {
                    $("#info").append(data);

                    setTimeout("getData()", 1000);
                }
            });
        }
    </script>
</head>
<body>
    <div id='info'></div>
</body>
</html>

Ajax.php

<?php
    if(rand(1, 100) % 2) {
        echo 'even';
    } else {
        sleep(rand(1, 4));
    }   
?>

请求正在发送,但即使if语句返回false,它仍会发送新的请求,我正在尝试使其仅在if语句返回true时接收数据。 - Joshwaa
你的意思是它不工作了? - ace
如果不是“偶数”,您的意思是您不想再收到另一个请求了。 - ace
如果 if(rand(1, 100) % 2) 返回 true,我希望请求保持打开状态,等待下一次尝试返回 true。 - Joshwaa
@Joshwaa:确保它发送了新请求,即使返回为空,你也可以看到这些成功的代码行:function(data) { $("#info").append(data); setTimeout("getData()", 1000); } - genesis
1个回答

0

尝试在ajax.php中使用这个

<?php
    if(rand(1, 100) % 2) {
        echo 'even<br />';
    } else {
        sleep(rand(8, 12));
    }   
?>

观看此视频,有时需要等待长达12秒

如果让它在一秒钟内完成,它会看起来是坏的,但实际上并不是


这跟我的代码完全一样,只是多了一个更长的睡眠时间?那是干什么用的? - Joshwaa
@Joshwaa:你的问题在于,在你的情况下它似乎是“损坏”的,因为你甚至收到了很多次。或者说什么是“损坏的”,什么没有工作? - genesis
@Joshwaa:不是这样的。当你循环浏览这些新闻50秒时,它是可以的。它将在以下两种情况下输出并发送新请求:1. 50秒后;2. 当有新的新闻时。 - genesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接