Php 如何使页面像facebook一样自动更新,而不使用setTimeout()或setInterval()

Php 如何使页面像facebook一样自动更新,而不使用setTimeout()或setInterval(),php,jquery,ajax,Php,Jquery,Ajax,是否可以不使用setInterval()或setTimeout()?如何像Facebook页面一样更新页面 如果我在网络浏览器中打开Facebook,当其他朋友添加任何新帖子时,该页面会自动更新。我怎样才能做到这一点?当我使用setInterval()或setTimeout()时,页面变得沉重。提前谢谢 setInterval(ajaxCall1, 3000); function ajaxcall1 { $.ajax({ url: 'echo_file.php',

是否可以不使用
setInterval()
setTimeout()
?如何像Facebook页面一样更新页面

如果我在网络浏览器中打开Facebook,当其他朋友添加任何新帖子时,该页面会自动更新。我怎样才能做到这一点?当我使用
setInterval()
setTimeout()
时,页面变得沉重。提前谢谢

setInterval(ajaxCall1, 3000);
function ajaxcall1 {
    $.ajax({
        url: 'echo_file.php', 
        datatype: 'json',
        success: function(data) {
            seriesOptions = data;
            createChart();
        },
    });
试试这个

<html>
<head>
    <title>BargePoller</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript" charset="utf-8"></script>

    <style type="text/css" media="screen">
      body{ background:#000;color:#fff;font-size:.9em; }
      .msg{ background:#aaa;padding:.2em; border-bottom:1px #000 solid}
      .old{ background-color:#246499;}
      .new{ background-color:#3B9957;}
    .error{ background-color:#992E36;}
    </style>

    <script type="text/javascript" charset="utf-8">
    function addmsg(type, msg){
        /* Simple helper to add a div.
        type is the name of a CSS class (old/new/error).
        msg is the contents of the div */
        $("#messages").append(
            "<div class='msg "+ type +"'>"+ msg +"</div>"
        );
    }

    function waitForMsg(){
        /* This requests the url "msgsrv.php"
        When it complete (or errors)*/
        $.ajax({
            type: "GET",
            url: "msgsrv.php",

            async: true, /* If set to non-async, browser shows page as "Loading.."*/
            cache: false,
            timeout:50000, /* Timeout in ms */

            success: function(data){ /* called when request to barge.php completes */
                addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
                setTimeout(
                    waitForMsg, /* Request next message */
                    1000 /* ..after 1 seconds */
                );
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                addmsg("error", textStatus + " (" + errorThrown + ")");
                setTimeout(
                    waitForMsg, /* Try again after.. */
                    15000); /* milliseconds (15seconds) */
            }
        });
    };

    $(document).ready(function(){
        waitForMsg(); /* Start the inital request */
    });
    </script>
</head>
<body>
    <div id="messages">
        <div class="msg old">
            BargePoll message requester!
        </div>
    </div>
</body>
</html>

驳船装卸工
正文{背景:#000;颜色:#fff;字体大小:.9em;}
.msg{background:#aaa;padding:.2em;边框底部:1px#000 solid}
.old{背景色:#246499;}
.new{背景色:#3B9957;}
.错误{背景色:#992E36;}
函数addmsg(类型,msg){
/*添加div的简单助手。
type是CSS类的名称(旧/新/错误)。
msg是div的内容*/
$(“#消息”)。追加(
“+msg+”
);
}
函数waitForMsg(){
/*这将请求url“msgsrv.php”
完成时(或错误)*/
$.ajax({
键入:“获取”,
url:“msgsrv.php”,
async:true,/*如果设置为非异步,浏览器将页面显示为“加载…”*/
cache:false,
超时:50000,/*以毫秒为单位的超时*/
成功:对barge.php的请求完成时调用函数(数据){/**/
addmsg(“new”,data);/*将响应添加到.msg div(使用“new”类)*/
设置超时(
waitForMsg,/*请求下一条消息*/
1000/*…1秒后*/
);
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
addmsg(“错误”,textStatus+”(“+errorSprown+”));
设置超时(
waitForMsg,/*请在..之后重试*/
15000);/*毫秒(15秒)*/
}
});
};
$(文档).ready(函数(){
waitForMsg();/*启动初始请求*/
});
BargePoll消息请求者!

使用web套接字将数据推送到客户端是AJAX轮询的更好解决方案

这允许服务器在发生更改时进行通知,并主动将数据推送到相关客户端。这消除了由于每隔几秒钟发送一次重复请求而在服务器和客户机上造成的不必要负载

一种流行的web套接字解决方案是NodeJ和socket IO的组合。可在此处找到这些资源的链接:



这些都相对容易掌握,你可以在几分钟内开始

您可以像上面那样进行轮询,也可以使用websockets,这有点复杂,但只有在发生更改时才会更新。感谢您的命令。我有很多div需要使用ajax更新。每个用户每秒的ajax op可能不是很可伸缩。