在控制器中重定向后停止setTimeout

时间:2014-01-05 08:33:29

标签: javascript ajax

我的ajax调用有问题,它会继续调用我的控制器。

AJAX功能

<script type="text/javascript">
 var stopTime =0;
 var scoreCheck =  function ()
    {
      $.ajax({
      url: "<?php echo 'http://127.0.0.1/ProgVsProg/main/checkScore'?>",
      success:function(output){
        if(output){
          $('#maincontent1').html(output);
          clearTimeout(stopTime);
            }
        else{
          stopTime = setTimeout(scoreCheck, 1000);   
            }
    }
  });
}
stopTime = setTimeout(scoreCheck,3000);
</script>

控制器

public function checkScore(){
    $id = $this->session->userdata('userID');
    $battleID = $this->lawmodel->getBattle($id);
    foreach($battleID as $row){
        $Rscore = $row->requestedScore;
        $Cscore = $row->challengerScore;
        if($Cscore=="1"){
                redirect('main/secondRound');
            }
        else if($Rscore == '1'){
            redirect('main/secondRound');
        }
    }
}

这是我的 secondRound函数

public function secondRound(){
    $category = 'medium';
    $data['results'] = $this->lawmodel->roundTwoQuestion($category);
    $data['content'] = 'battlePage';
    if($this->session->userdata('is_logged_in'))
    {
        $this->load->view('includes/template2',$data);
    }
    else
    {
        redirect('main/restricted');
    }
}

我的问题是如何在第一次重定向后停止ajax调用..因为我使用setTimeout来检查数据库中是否有变化。如果我的数据库发生了变化,它将重定向到另一个控制器。在我的模型 roundTwoQuestion()中,它将查询数据库中的随机数据,限制为1。

在我看来......我将继续使用roundTwoQuestion中的随机数据重定向/刷新。

请帮忙!我是ajax的新手。 :(

1 个答案:

答案 0 :(得分:0)

您的控制器功能称为“CheckScore”,因此返回检查状态并在成功AJAX回调中对其进行测试,然后调用另一个函数(或使用javascript重定向,...),如果状态为真,则重定向:

AJAX功能

<script type="text/javascript">
 var stopTime =0;
 var scoreCheck =  function ()
    {
      $.ajax({
      url: "<?php echo 'http://127.0.0.1/ProgVsProg/main/checkScore'?>",
      success:function(output){
        if(output === "OK"){
          clearTimeout(stopTime);

          //Ok, now you can redirect using the way you want
        }
        else{
          //Check return a false status, so continue to execute this function
          stopTime = setTimeout(scoreCheck, 1000);   
        }
    }
  });
}
stopTime = setTimeout(scoreCheck,3000);
</script>

<强>控制器

public function checkScore(){
    $id = $this->session->userdata('userID');
    $battleID = $this->lawmodel->getBattle($id);

    //Do your check here according to your DB result
    echo ($status) ?"OK" : "KO"; 
}