【问题标题】:Ajax alert when a row has been added to a mysql database将行添加到 mysql 数据库时的 Ajax 警报
【发布时间】:2011-03-09 18:18:53
【问题描述】:

我正在尝试为我的网站创建实时订单页面。我需要自动更新页面以显示已下新订单并在数据库中有新订单行时显示警报/声音。

关于如何轻松实现这一目标的任何想法?

谢谢, -阿杰

【问题讨论】:

    标签: php jquery mysql ajax


    【解决方案1】:

    您需要使用Comet 之类的东西才能将数据推送到客户端。

    然后,使用MySQL trigger 以某种方式在您的服务器应用程序中引发一个事件,该事件保持 Comet 连接打开以推送适当的数据。

    许多开发人员使用的不太优雅的方式(至少在WebSockets 流行之前)是poll with AJAX for changes,但这有很高的带宽开销和更长的延迟。

    【讨论】:

    • 如果每个人都停止轮询,我会很高兴,但事实是让长期 HTTP 连接无缝工作可能很困难。
    【解决方案2】:

    从 AJAX 视图中,您应该像这样在 javascript 中使用计时器...

    // First parameter is an expression and second is a interval as miliseconds.
    setTimeout ( "UpdateFunction()", 2000 );
    

    我还建议您使用此代码...

    setTimeout ( "UpdateFunction()", 5000 );
    
    function UpdateFunction( )
    {
      // (do something here)
      setTimeout ( "UpdateFunction()", 5000 );
    }
    

    您的UpdateFunction() 应该调用更新订单列表的php 或asp 页面。

    【讨论】:

    • 如果您不希望每 5 秒有新内容,此解决方案会导致大量带宽浪费。此外,如果您期望内容的频率高于每 5 秒一次,那么更快地接收内容会更好。如果不能使用推送方法,自适应轮询时间可能会更好。
    • 您应该引用不带引号和参数的 UpdateFunction 以避免 eval。这也可以... setTimeout(function() { alert('hi'); }, 5000);
    • Gmail 使用这种技术来保持邮件和嗡嗡声的更新列表!我阅读了 Gmail 页面的源代码,并且 setTimeOut 被使用了 5 次!在某些情况下,间隔是 100 或 250 毫秒!
    【解决方案3】:

    我认为轮询方法会很好,因为服务器推送对浏览器有很多负面影响。

    如果使用轮询路由,我建议在您的页面上发生一个定时事件,该事件将调用 Web 方法。然后,Web 方法将返回有关排队订单的数据(有点像 ID)。将 ID 列表与页面上当前充实的内容进行比较,并假设您在新给定的列表中有不存在的内容(反之亦然),调用单独的方法来检索其他详细信息以显示来自的新订单或删除旧条目。

    这样,您无需保持稳定的流向服务器(这会阻止用户的浏览器发出额外的内容请求)。

    我希望这会有所帮助。

    【讨论】:

    • @Ben:摘自您的维基百科链接:“特别是 HTTP 1.1 规范规定,浏览器与 Web 服务器的同时连接不应超过 2 个。但是,保持一个连接真实打开-time 事件对浏览器的可用性有负面影响。浏览器可能会在仍在加载时被阻止发送新请求,例如,一系列图像。"
    • 这就是为什么您只在页面加载后才打开 Comet 连接的原因。另请注意,当离开页面时,连接也会被重置。连接不应该阻塞负载。此外,IE8+、Firefox、Chrome 和 Safari 默认最多允许 6 个或更多连接,只有 HTTP 1.1 服务器的 IE6/7 默认最多 2 个连接。为了进一步缓解这种情况,请在不同的子域(即:comet.example.com)上建立您的 Comet 连接
    • @Ben:是的,这里没有参数。有许多变通方法可以尝试让流程适应所有场景。我建议进行投票(就像 90% 的标准网站一样),因为他说出了“轻松”这个神奇的词。您自己说过“让长期 HTTP 连接无缝工作可能很困难”。
    猜你喜欢
    • 2013-11-17
    • 2021-01-30
    • 2012-07-08
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多