如何在JQuery中显示动态更新的数据

时间:2016-08-14 14:37:21

标签: javascript php jquery html

我正在尝试显示数据库中有多少行。这应该动态更新,因此当行数更改时,显示的数字也会更新。我尝试用PHP打印它,但它不是动态的。

这是索引文件:

  <script>
      $(document).ready(function() {
          setInterval("ajaxcall()",2000);
      });

      function ajaxcall() {
       $.ajax({
       type: "GET",
       url: "count.php"
       success: function(response){
           json_object = JSON.parse(response)
           var count = json_object.count

       // HOW TO DISPLAY COUNT SO IT IS DYNAMIC
       }
       });
       }
       </script>

这是count.php

$num_rows = mysql_num_rows($result);
echo json_encode($num_rows);

2 个答案:

答案 0 :(得分:3)

您需要 -

  • 定期进行ajax调用以检查更新的值。(这是你目前正在做的事情。) - 如果用户要连接很长时间,通常是一个坏主意。
  • 或者,更好的解决方案是使用HTML5 web sockets代替。

socket.io这样的项目可以很容易地在javascript服务器(节点)上实现websockets。但PHP也有一些选择。 -

  • Ratchet - 与socket.io类似,但是为PHP构建。
  • Elephant.io - 也是websockets的PHP实现,但它是一个ws'client',它可以在服务器上运行。因此,您可能还必须在服务器上部署node和socket.io,并使用elephant.io驱动它以处理与其他客户端的websocket通信。
  • phpsocket.io - “基于Workerman的PHP中socket.io的服务器端替代实现。” - 根据其github页面。

关于phpsocket.io的文档并不多,但API的自述文件中的示例看起来很简单。这样的事情对你有用 -

<?
use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
    $socket->on('get count', function($msg)use($io){
        $num_rows = mysql_num_rows($result);
        $io->emit($num_rows, $msg);
    });
});

并在客户端 -

var count = 0;
// check if browser supports websockets
if ("WebSocket" in window) {
    var ws = new WebSocket("ws://yourdomain.com:2021/");
    ws.onopen = function() {
        // Web Socket is connected, send data using send()
        ws.send("get count");
    };
    ws.onmessage = function (evt) { 
            var received_msg = evt.data;
            json_object = JSON.parse(response)
            count = json_object.count
            $("#database-results").text(count);
    };
}

*免责声明 - 我之前没有测试上面的代码或使用过phpsocket.io库。所以代码可能不起作用。此外,Ratchet看起来是一个更成熟的项目,所以如果你想为你的应用程序提供更强大的解决方案,你应该进一步研究它。

我从this得到了很多上述信息。然而,有些信息已经过时了几年,最高评价的答案并没有为今天提供最好的解决方案。

答案 1 :(得分:2)

您可以使用count响应中的AJAX变量更新DOM元素。

如下所示:

<span id="database-results">
</span>

然后在您的AJAX成功通话中,将count变量附加到HTML元素:

success: function(response) {
          json_object = JSON.parse(response)
          var count = json_object.count

          $("#database-results").text(count);
}

作为补充说明,您将每隔2秒使用AJAX请求向服务器发送垃圾邮件,具体取决于您的用户群,这可能需要考虑。