Javascript 如何在yii中每秒渲染存储在db中的动态数据

Javascript 如何在yii中每秒渲染存储在db中的动态数据,javascript,timer,automation,Javascript,Timer,Automation,我想知道每秒的注册人数。通过AJAX,我们检索一些事件的数据,例如单击,但是在不动态单击的情况下,数据应该从数据库中获取。 类似的东西应该会自动刷新并获取值 它在刷新页面或基于事件的页面上获取,但没有任何这些,我如何获得结果 这能做到吗?有谁能指导我如何做到这一点。我也不确定我应该申请什么标签。如果我不清楚,请让我知道我会详细说明 <script> getFeed(); var auto_refresh = setInterval( function

我想知道每秒的注册人数。通过AJAX,我们检索一些事件的数据,例如单击,但是在不动态单击的情况下,数据应该从数据库中获取。 类似的东西应该会自动刷新并获取值

它在刷新页面或基于事件的页面上获取,但没有任何这些,我如何获得结果

这能做到吗?有谁能指导我如何做到这一点。我也不确定我应该申请什么标签。如果我不清楚,请让我知道我会详细说明

  <script>

getFeed();

    var auto_refresh = setInterval(
        function ()
   {
     getFeed();
      if (last_timestamp === undefined)
     {
    clearInterval(auto_refresh);
    last_timestamp = -1;
       }

   }, (1000 * 60)); // refresh every 60 seconds



 var last_timestamp = 0;
function getFeed()
{


    $.ajax({
        type        : 'GET',
        url         : '<?php echo Yii::app()->request->baseUrl;?>/index.php/mycontroller/chart',
        data        : null,
        dataType    : 'html',
        success:function(data){
            $("#chart").html(data);
        },
    });


}
     </script>


 <div id="chart">

 </div>

getFeed();
var auto_refresh=setInterval(
函数()
{
getFeed();
如果(最后的时间戳===未定义)
{
clearInterval(自动刷新);
最后的时间戳=-1;
}
}, (1000 * 60)); // 每60秒刷新一次
var last_timestamp=0;
函数getFeed()
{
$.ajax({
键入:“GET”,
url:“/index.php/mycontroller/chart”,
数据:空,
数据类型:“html”,
成功:功能(数据){
$(“#图表”).html(数据);
},
});
}

上面的代码在60秒后不会自动检索结果。如何在每秒钟调用一个动作,而不是在任何事件或刷新页面上?

据我所知,PHP和PHP框架作为主要技术无法满足您的要求

要做到这一点,您需要使用HTTP协议之上的协议。检查以下为WebSocket编程构建的技术

  • (现在流行一天)

  • 首先,了解这不是一个Yii问题。您的服务器代码是用PHP/Yii编写的这一事实只是一个共同现象

    然后,要明白服务器无法控制这一点,因此最好为浏览器找到一个解决方案。使用JavaScript解决方案将是最简单的

    var myFuntion = setInterval(
    function ()
    {
       alert('Wow. A minute has passed';    
    }, (1000 * 60)); // refresh every 60 seconds
    
    在我的解决方案中,我维护一个时间戳,它将帮助我获得在时间戳之后创建的新项目。你的情况可能不同。我在查询中使用这个时间戳

    $timeStamp = $_GET['timestamp'];
    $sqlQuery = "SELECT * FROM feed WHERE timestamp > $timeStamp";
    
    在我的网页中,我有一个Javascript函数,它将定期运行并调用getFeed()函数

    如果您使用的是Yii,那么可能已经加载了JQuery,因此使用它向服务器发出一些Ajax调用可能是有意义的。请注意,我传递了时间戳(第一次为0)

    var last_timestamp=0;
    函数getLeftPanelFeeds()
    {
    var url='/mycontroller/getfeed/'+last_时间戳;
    $.ajax({
    键入:“GET”,
    url:url,
    数据:空,
    数据类型:“html”
    })
    .完成(功能(数据){
    变量源=$(''+数据+'');
    var feed_update_list=source.find('#feedresult').html();
    $(“#左面板_提要”)。前置(提要_更新_列表);
    last#u timestamp=source.find('#last_timestamp').html();
    });
    }
    
    尝试搜索
    节点js
    我确实尝试了,但没有工作。我用60秒后尝试的内容更新了我的问题。它无法从数据中获取数据。我不确定你的代码为什么没有工作。如果我粘贴到代码中,t就可以工作,但是,我已经更新了响应,以显示setInterval()函数的一般用法。尝试此操作并了解其工作原理,将自定义操作添加到函数中。
    getFeed();
    
    var auto_refresh = setInterval(
    function ()
    {
       getFeed();
       if (last_timestamp === undefined)
       {
            clearInterval(auto_refresh);
            last_timestamp = -1;
       }
    
    }, (1000 * 60)); // refresh every 60 seconds
    
        var last_timestamp = 0;
        function getLeftPanelFeeds()
        {
            var url         = '/mycontroller/getfeed/' + last_timestamp;
    
            $.ajax({
                type        : 'GET',
                url         : url,
                    data        : null,
                dataType    : 'html'
            })
    
            .done(function(data) {
    
                var source = $('<div>' + data + '</div>');
    
    
                var feed_update_list = source.find('#feedresult').html();
                $('#left_panel_feed').prepend(feed_update_list);
    
                last_timestamp = source.find('#last_timestamp').html();
    
            });
        }