如何使用php在固定的时间间隔内重复调用函数

时间:2015-06-19 10:02:34

标签: javascript php

我有一个用php编写的函数insertdata()。它从一个数据库表中获取值,然后将其插入另一个数据库表中。

我希望以固定的时间间隔重复此操作,直到单击停止按钮。 请帮帮我..

我尝试使用setInterval,但它只运行一次。 我也用

if(isset($_POST['stopbutton']))
    $stop=1;
else
    $stop=0;

function insertdata(){
    while ($stop=0) {
        //get the values from Table1 and insert it into Table2
    }
    sleep(1);
    if ($stop==1)
        echo stop;
    }

请帮帮我..

3 个答案:

答案 0 :(得分:0)

您需要继续检查$stop变量。提交帖子后,您的应用程序不会知道,因为已经调用了if语句。你可以通过在while循环中检查它来解决这个问题。

答案 1 :(得分:0)

如果您这样做,基本上会发生这种情况:

CLIENT              |    SERVER
                    |
+--------+
|        | stop = 0
|   *----|--------> +------+
|        |          | loop |
|        |          |      |
|        |          |      |
|        |          |      |
|        |          |      | stop = 0
|   *----|---------------------------> +------+
|        |          |      |           | loop |
|        |          |      |           |      |
|        |          |      |           |      | stop = 1
|   *----|---------------------------------------------> +------+
|        |          |      |           |      |          | stop |
+--------+          |      |           |      |          +------+
                    +------+           |      |
                                       |      |
                                       |      |
                                       +------+

在每次调用服务器端脚本时,$stop的值永远不会改变。

您要做的只是在服务器端的每次运行中执行一次移动操作,并让客户端每隔一秒执行一次请求。

您的任务是跟踪您在移动操作中的位置并将其与客户端同步。

答案 2 :(得分:0)

试试这段代码。它正在发挥作用。

已编辑的代码

  

repeatInsert.php

<?php
if(isset($_POST['stopbutton']))
{
    echo "Stopped";
    exit;
}
if(isset($_POST['startbutton']))
{
    insertdata();
    exit;
}

function insertdata(){
    //Insert code here
}
?>
<html>
    <head>
        <title>Repeated Insert</title>
    </head>
    <body>
        <input type="button" value="Start Insert" name="startbutton" onclick="start();" />
        <input type="button" value="Stop Insert" name="stopbutton" onclick="stopInsert();" />
        <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
        <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
        <script type="text/javascript">
            var intervals;
            $(document).ready(function(){

            });
            function start()
            {
                startInsert();

                intervals = setInterval(startInsert, 1000);
            }

            function startInsert() {
                $.ajax({
                    type: "POST",
                    url: "repeatInsert.php",
                    data: {startbutton : true},
                    success: function(){
                    },
                    dataType: "json"
                });
            }

            function stopInsert() {
                clearInterval(intervals);
                $.ajax({
                    type: "POST",
                    url: "repeatInsert.php",
                    data: {stopbutton : true},
                    success: function(){
                    },
                    dataType: "json"
                });
            }
        </script>
    </body>
</html>