【问题标题】:How to pull a realtime list of users using AJAX and PHP from a MySQL database如何从 MySQL 数据库中提取使用 AJAX 和 PHP 的实时用户列表
【发布时间】:2011-08-06 11:54:08
【问题描述】:

所以我在想,我有一个简单的 cms 和管理页面,其中列出了所有注册到我的系统的用户,但我想要的是一种实时查看正在创建的用户以及他们对那里信息所做的任何更新的方法,所以如果我在管理页面上并且有新用户注册或有人更改了电子邮件地址,我希望页面显示更改而无需刷新,我真的不知道从哪里开始,除非我知道我会使用 Ajax 刷新信息而不刷新页面。如果有人能给我任何指针或sn-ps,我将非常感激。

谢谢,

【问题讨论】:

    标签: php mysql ajax xmlhttprequest


    【解决方案1】:

    不确定您在这里寻找多少细节,但这里有一个高水平的镜头;

    check_new_users.php

    $timestamp = $_GET['timestamp'];
    $array_of_new_users = getNewUsersFromDB($timestamp);
    echo json_encode(array('new_users' => $array_of_new_users));
    

    check_new_users.js(假设您已包含 JQuery)

    $(document).ready(function () {
    
      // function to poll the server and get the new users from your script
      var CheckNewUsers = function () {
        var data = {timestamp : new Date().getTime()};
        $.getJSON("path/to/check_new_users.php", data, function (JSON) {
          var new_users = JSON.new_users,
            rowHTML = '';
    
          // the exact structure here depends on what the array
          // returned from the function getNewUsersFromDB() looks like
          // lets assume it looks like:
          // array(userid => array(info about the user))
          // E.G.
          // array(1 => array(userid => 1, username => "matt"),
          //       2 => array(userid => 2, username => "joe")...
    
          // process and display the new users onto your page
          for (userid in new_users){
            u = new_users[userid];
            rowHTML = '<tr><td>' + u.userid + '</td><td>' + u.username '</td></tr>'
            $('#user_table').append(rowHTML);
          }
        }
      };
    
      // and set the function to run every 5 minutes
      setInterval(CheckNewUsers, 300000);  // 300000 milli = 5 minutes
    
    });
    

    如果您想详细了解我很乐意详细说明的任何内容,请告诉我!

    【讨论】:

    • 嗨,伙计,谢谢这对我有很大帮助,但是一旦我获得了新的数据数组,我该如何在表格中显示它?
    • @Ben Cobbold,我用一个循环更新了我的答案,将它们写到一张桌子上。请参阅评论,了解这取决于您的数据的结构。
    • 嗨,伙计,我真的很困惑,有没有可以通过 msn 或 skype 与您联系,以便您向我解释并可能告诉我如何整合它?谢谢,本
    【解决方案2】:

    根据您使用的 CMS,这可能容易或困难。就像 Nik 所说,您需要为此编写一个客户端站点,该站点以设定的时间间隔轮询服务器端脚本。这应该不会太难,尤其是使用 jQuery 之类的东西。

    在服务器端,您需要知道这些修改是否存储在表中。一些 CMS 可能会在编辑和新用户创建上加上时间戳。如果是这种情况,那么您应该将时间戳连同任何更新一起传递给 AJAX 页面。然后在下一次轮询中,在请求中包含最后一个时间戳,并让数据库查询 TIME > TIMESTAMP 的活动。

    您可能需要在多个位置编辑 CMS 以添加此功能,如果不了解更多详细信息,很难准确地说出需要什么。

    【讨论】:

      【解决方案3】:

      希望这会有所帮助,我知道我没有详细说明,但这可能会给你一个路线图。

      您可以使用 javascript 定期轮询服务器(可能每 15 秒一次)。

      它可以向一些专门用于此目的的 url 发出 HTTP 请求,例如 yoursite.com/poll_for_user_changes。这个 url,而不是返回 HTML 网页内容,可以简单地发送一个 JSON 对象(或一些其他格式的数据),其中将包含您想知道的任何更改。

      当您点击 yoursite.com/poll_for_user_changes 时,您的服务器将不得不确定数据库中的用户表是否发生了更改。因此,如果您的 javascript 能够跟踪浏览器上次从服务器接收更新的时间,这将很有帮助,因此当它要求新的更新时,它可以在 URL 的获取字符串(或通过帖子)中发送 last_updated_timestamp 的时间它最后收到了更新。服务器可以通过构建数据库查询来使用此信息,该查询请求例如用户表中创建时间戳大于 last_updated_timestamp 的行。

      一旦您的 javascript 从服务器接收到有关是否有任何更改的数据,您将必须决定如何将这些数据合并到网站中以自动显示更改而无需刷新。

      【讨论】:

      • 您好,我确实有一个时间戳,每次用户登录时都会在他们登录的时代存储一个时间戳,但即使知道他们登录并不意味着信息发生了变化,所以假设我有 500 名注册人,如果只有 300 人登录,我会提取大量信息,所以我需要一种方法来检查具体事情是否发生了变化。同样对于新用户,我不能只取总行数并取前一个总金额并比较两者,如果当前总金额大于前一个,那么它会获取所有新信息?
      • 哦,好吧,我的意思是每当您轮询时,每 15 秒或其他任何时间,跟踪您轮询时的时间戳,因此下次轮询时,您只需询问数据库上次发生的更改15 秒。我稍微编辑了我的帖子,以便更清楚地表达我在说什么。
      • 顺便说一句,来自 goggin13 的答案/代码示例与我的大纲完全一致,因此如果您一起阅读它们,您可能能够更好地理解代码。祝你好运! :)
      猜你喜欢
      • 2012-11-08
      • 2014-05-03
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多