停止功能满足条件后执行

时间:2011-07-19 15:18:23

标签: jquery

我的html页面触发2个php脚本,一个用于执行任务,另一个用于轮询日志文件并在html页面上显示结果。 'updatestock.php'完成后如何停止getStatus()进程?

  <script type="text/javascript">
    $(function() {
        startProcess();
        getStatus();

    });

    function startProcess() {

      $("#done").load('updatestock.php');

    }

    function getStatus() {

      $("#status").load('getstatus.php');
        setTimeout("getStatus()",2000);

    }

    </script>

4 个答案:

答案 0 :(得分:3)

你使用clearTimeout:

// persistent variable needed
var timeout = 0;
$(function() {
    startProcess();
    getStatus();

});

function startProcess() {
  // second parameter of load = completion callback
  $("#done").load('updatestock.php',function()
  { 
      // clearTimeout will stop the next getStatus from firing.
      clearTimeout(timeout); 
      timeout = -1;
  });

}

function getStatus() {
  // just in case. You never know what's cached.
  // (the ids for setTimeout are positive).
  if( timeout < 0 ) return; 
  $("#status").load('getstatus.php');
  // sets the ID of the current timeout.
  timeout = setTimeout("getStatus()",2000);

}

答案 1 :(得分:2)

使用load()方法中的回调来设置标记,然后在getStatus()方法中检查它:

$(function() {
    startProcess();
    getStatus();

    var flag = false;
});

function startProcess() {

    $("#done").load('updatestock.php', function() {

        flag = true;

    });

}

function getStatus() {

    if ( flag ) return false;

    $("#status").load('getstatus.php');
    setTimeout("getStatus()",2000);

}

答案 2 :(得分:0)

getStatus的延迟调用放入load的回调中,并使用if语句根据getstatus.php返回的内容确定是否调用它。它可以是某个响应代码或数据位,例如JSON响应中的"finished": true

答案 3 :(得分:0)

var stopProcess = false;


function startProcess() {

    $("#done").load('updatestock.php', function() {

        stopProcess  = true;

    });

}

function getStatus() {

    if ( stopProcess){
        return false;
    }

    $("#status").load('getstatus.php');
    setTimeout("getStatus()",2000);

}