【问题标题】:Timely interval to retrieve data from db, and stop when the data arrives时间间隔从db中检索数据,并在数据到达时停止
【发布时间】:2011-12-23 22:54:06
【问题描述】:

我是新手,请善待:)

从 mysql 数据库检查、检索和使用新接收到的数据的最简单解决方案是什么?

正在从外部 api 更新数据库。理想情况下,我会在它到达时得到它,但使用间隔也可以。 在第一次迭代时,如果同时没有新数据,则每 5 分钟一次 - 对数组的下一个条目执行操作,这可能会导致数据在接下来的 5 分钟内更新。但我想确保在收到新数据后停止一切,并在 php 中执行一些操作。

最简单的解决方案是什么? php vs jquery/ajax?

我提出的解决方案是在 jquery 中:

        <script>
            var newdata = false;
            if(newdata === false){
                setTimeout (function(){
                    $.each(array, function(){
                            $.post('checkdb.php',data,function(resp){
                                          if(resp){
                                          newdata=resp;
                                          return newdata;                                                  
                                          }
                                          else{
                                          $.post('doaction.php',data);
                                          // cause a potential update within the next 5 min
                                          }
                            });
                    });
                }, 300000); 
            }
            else{
                // move newdata back to php and (then) do something with response
            }
        </script>

谢谢! :)

【问题讨论】:

  • 你不应该在块之后放置分号。将所有内容都包装在 PHP 标记中也没有意义(JavaScript 根本不是 PHP)。
  • 好的,谢谢!将修复;。关于 php 标签:我知道,但这是 php 页面的一部分(这是所有变量的来源),如果您可以建议一个纯 php 解决方案,那也很棒。 tnx
  • 好的,我都修好了,tnx!任何逻辑上的 cmets 也将不胜感激:)

标签: php javascript jquery mysql logic


【解决方案1】:

我最终的解决方案确实是php而不是ajax(这种情况下真的不需要客户端)。

这是大纲:

    <?php
        while (something is true){
            //do stuff

            flush(); // execute the stuff you did until now
            sleep(300); // wait 5 min
            // now check database and retrieve new data, if any, and insert into $result 

            if (isset($result)){
                //do stuff with the $result
                break; // get out of the loop
            }
        }
    ?>

【讨论】:

    【解决方案2】:

    不要在客户端使用这样的逻辑。 JavaScript 可以很容易地操作/更改。有人可以用更短的间隔替换间隔并给服务器施加压力。阅读Comet,用它来等待服务器的结果。在服务器端执行所有逻辑:实现数据库轮询(根据需要使用间隔),并在需要时将数据推送到浏览器/停止轮询/做任何你想做的事情。

    【讨论】:

    • 好的,这听起来像是我应该采取的方向,谢谢。但是我如何在 php 中使用间隔?我想不通
    • 嗯,这当然取决于您真正想要实现的目标。您可以使用 PHP sleep() 函数在请求超时内循环触发动作。当达到超时时,JavaScript 应该发起另一个请求。您还可以阅读有关 PHP 套接字的信息。
    • 另外,您可以使用 Comet 服务器或 node.js。很多可能性。
    • 在 php 中是通过使用“睡眠”吗?但是为什么是js呢?据我所知,我使用 js 的唯一原因是超时功能。其余的基本上都是来自php的逻辑+变量。所以如果时间也是在php中,那么这里还需要js吗?
    • 是的,因为仍然需要从服务器中提取数据。 PHP 本身不能发送任何东西。您必须请求它 - 通过使用浏览器中的刷新按钮或 AJAX/Comet。
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多