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