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

Posted

技术标签:

【中文标题】如何在 JQuery 中显示动态更新的数据【英文标题】:How to display dynamically updated data in JQuery 【发布时间】:2016-12-20 23:03:33 【问题描述】:

我正在尝试显示数据库中有多少行。这应该是动态更新的,所以当行数改变时,显示的数字也会更新。我尝试用 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);

【问题讨论】:

“动态”是指当服务器上的数据库更改时计数应自动更改,还是应显示在页面上某处并每两秒更新一次(当您进行 ajax 调用时) ? 【参考方案1】:

你需要 -

定期进行 ajax 调用以检查更新的值。(这是您当前正在执行的操作。) -- 如果用户要连接很长时间,这通常是个坏主意。 或者,更好的解决方案是改用HTML5 web sockets

socket.io 之类的项目使在 javascript 服务器(节点)上实现 websocket 变得非常容易。但是 PHP 也有一些选择。 -

Ratchet - 与 socket.io 类似,但为 PHP 构建。 Elephant.io - 也是 websockets 的 PHP 实现,但它是一个 ws“客户端”,用于在服务器上工作。因此,您可能还必须在服务器上部署 node 和 socket.io,并使用大象.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 那里得到了很多上述信息。然而,那里的一些信息已经过时了几年,并且那里的最高评价的答案并没有提供当今最好的解决方案。

【讨论】:

【参考方案2】:

您可以使用来自AJAX 响应的count 变量更新 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 请求的垃圾邮件,具体取决于您的用户群,这可能需要考虑。

【讨论】:

这不会是“动态的”。我认为 vonder 希望在客户端上实时更新计数。 @charsi - 每次发出 AJAX 请求时都会更新。 OP 已经在使用 $.ajax 方法,因此在他们已经作为解决方案的基础上构建是有意义的。 从他的问题来看,他似乎希望它自动更新而无需任何进一步的 ajax 调用。我已请他澄清是否是这样。 @charsi - 他在 setTimeout 上有 AJAX 请求,因此他正在轮询服务器以获取任何新的更新行。我相信 OP 正在努力在文档对象模型中显示请求的内容,因此我的回答是。我还指出,每 2 秒轮询一次服务器可能不是最有效的。 是的,你是对的。我刚刚看到他正在使用超时来进行 ajax 调用。

以上是关于如何在 JQuery 中显示动态更新的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用淘汰赛动态更新 Jquery Mobile SPA 中的详细信息页面的最佳方法

js如何根据id删除数组数据,并动态更新这个div?

如何创建动态更新样条 Highcharts 图表?

如何使用 jQuery UI 滑块动态更新 highcharts

使用 jquery 动态更新 DataTable 内容

jquery mobile listview使用ajax动态加载后,跳转到其他页面返回时数据没有保存如何解决?