【问题标题】:Use AJAX to watch SQL database for changes [closed]使用 AJAX 监视 SQL 数据库的更改 [关闭]
【发布时间】:2010-05-11 18:23:35
【问题描述】:

我的数据库中有一个将随机更新的列。每当更新该列时,我都需要刷新页面上的内容。如何使用 AJAX + jQuery 仅对数据库更改执行操作?

【问题讨论】:

    标签: jquery sql ajax


    【解决方案1】:

    您所描述的是通俗地称为Comet 编程。 Comet 描述了一组通过持久 HTTP 连接将内容推送到网页的技术。

    将使用数据库服务器中的触发器/存储过程组合来启动推送。这样,无论数据更新来自何处,都会发生这种情况。

    【讨论】:

    • 你明白了。 Wikipedia (en.wikipedia.org/wiki/Comet_%28programming%29):Comet ... 还有其他几个名字,包括 Ajax Push、Reverse Ajax、Two-way-web、HTTP Streaming 和 HTTP server push 等。
    • 这听起来很不错。我将不得不调查一下。感谢您的建议!
    【解决方案2】:

    使用javascript的setinterval函数进行轮询并检查更新的dababase字段的值

    查看以下链接了解更多详情http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

    【讨论】:

      【解决方案3】:

      服务器(数据库/网络)无法发起连接——只有客户端可以。因此,您必须轮询数据库,直到有更新。您可以创建一个检查数据库和 jQuery 使用的 Web 服务。

      编辑:我的立场是正确的。在服务器向其“推送”数据之前,可以保持 AJAX 连接打开。见:http://en.wikipedia.org/wiki/Reverse_Ajax

      显然它确实在轮询:http://en.wikipedia.org/wiki/Push_technology#Long_polling。如果服务器还没有任何数据要发送,它会保持连接打开直到它发送。它不是“纯”推送技术,因为客户端没有服务器连接的监听端口。然而,效果是相似的。

      编辑 2: 回到回答您的问题...您必须选择如何“轮询”网络服务。然后,Web 服务必须检查数据库以查看是否有更新。检查数据库的更新可能是最棘手的,实际上取决于您的要求。您可以运行 SQL 查询以查看是否有任何更改,但您怎么知道?您需要某种参数(通常是日期)来进行比较。如果做错了,您可能会错过一些更新或一次更新有多次点击。 Autocracy 所说的将是获得更新通知的好方法。您可以将该列表保存在数据库、内存等中,并在客户端获取更新时将其清除。

      【讨论】:

        【解决方案4】:

        我在聊天中做几乎相同的事情,每 xx 秒重新加载一个 php 脚本。

        看起来像这样: 如果不使用 jquery.noconflict 将 j 替换为 $..

        j(".chatref").everyTime(3000,function(i){
            j.ajax({
               url: "chatx.php",
               cache: false,
               success: function(updated){
                   j(".chatref").html(updated);
                   ...do stuff..
               }
           });
        

        我认为这是一个非常好的方法 :) 如果您想将 vars 发送到 chatx.php,只需添加 ?php &x=1&y=2?>

        【讨论】:

          【解决方案5】:

          将一个特殊的存储过程挂钩到您的数据库中,该过程会在修改后提醒您的应用程序。您需要一个自定义模块和正确的触发器语句。

          您的另一个选择是轮询。

          【讨论】:

          • 它如何提醒客户端浏览器上的应用程序?
          • 应用程序分为两部分:浏览器和网络服务器。后端 Web 服务负责与数据库对话,除非询问者使用 0.0000001% 的方式让浏览器与数据库对话 SQL。
          • +1 用于防止“数据库轮询”,即使不防止“客户端到服务器轮询”
          【解决方案6】:

          您将不得不不断地轮询具有数据库值的页面。

          【讨论】:

          • 不一定。有可用的推送技术。
          • @RobertHarvey 比如?可以给吗?
          【解决方案7】:

          我建议创建一个 HTML 页面,该页面使用 setIntreval() 重复对查询数据库的 PHP 脚本进行 AJAX 调用。您可以使用 JSON 和 PEAR 来简化任务。

          参考链接:

          【讨论】:

          • 知道了。非常感谢。你的方法完美!只是不能将间隔设置得太低,或者打开/关闭数据读取器有问题。
          【解决方案8】:

          您基本上必须不断地轮询服务器以了解对数据库的更改。服务器无法调用客户端,因此客户端只需要不断询问服务器是否有更改。

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 1970-01-01
          • 2012-12-04
          • 2019-03-27
          • 1970-01-01
          相关资源
          最近更新 更多