如何每1秒使用jQuery从数据库中获取实时数据

时间:2011-01-08 16:38:26

标签: php javascript jquery database

如何使用jQuery从mySQL数据库获取实时数据一个

我需要更改document.write所以我在新页面中看到结果

<SCRIPT>
            setTimeout("document.write('<p><?php
        $qry = mysql_query('SELECT SUM(clicks) AS total FROM short_urls');
        $row = mysql_fetch_assoc($qry);
        echo number_format($row['total']); ?></p>')",1000);
</SCRIPT>

2 个答案:

答案 0 :(得分:4)

一个简单的策略是使用setTimeout

setTimeout( function(){
  your_function_that_gets_data();
  your_function_that_displays_data();
}, 1000 );

对于更复杂的方法,您可以查看long polling


更新: Anas,在我提出上述选项之后,您似乎有点偏离了轨道。无论您使用的是setTimeout()还是setInterval(),您当然都希望避免混淆更新问题的混乱。

创建一个只返回总数的php页面。编写您的JavaScript以异步方式(即通过ajax)以您喜欢的任何间隔调用该页面。返回结果时,使用回调函数重绘页面区域,以便为用户更新总计。

这样的事情:

var updateTotal = function () {
  $.get('your_script_that_returns_a_total.php', function( data ){ // get new total
    $('#div_displaying_total').val( data ); // paint a div with the new result
  });
};

现在您有一个简单的功能,在运行时,将使用当前总数更新视图中的div。根据需要频繁运行该功能。例如,要每五秒运行一次:

var running = setInterval( updateTotal, 5000 );

你当然可以通过计时获得更多的动力,编写你的updateTotal函数,在延迟后调用自己等等。你可以像这样停止更新:

clearInterval( running );

...允许您轻松设置开/关开关。

如果任何一个导致更清晰,我建议更新你的问题,这会吸引其中混乱代码的暗示。

答案 1 :(得分:2)

您必须使用PHP来调用数据库以读取其中的所有行。每隔1000毫秒(1秒),使用JavaScript setTimeout()函数的AJAX事件集将调用PHP。我可以看到的huuuuge问题是,如果你有很多用户,一个大型数据库和大量的同时登录,你将很快超载你的服务器。我认为每隔30秒提交一次请求会更好,或者至少10次。