繁体   English   中英

ajax setTimeout在json_encode上不起作用

[英]ajax setTimeout not working on json_encode

AJAX功能

var stopTime = 0;
 var checkRequApprove =  function ()
    {
      $.ajax({
      url: 'http://127.0.0.1/ProgVsProg/main/checkApproveReq',
      success:function(output){
        jsn=JSON.parse(output);
        if(output==false){
         stopTime = setTimeout(checkRequApprove, 3000); 
            }
        else {
              bootbox.dialog({
              message: "Battle",
              title: "Request Accepted",
              buttons:
               {
                  success: {
                  label: "Approve",
                  className: "btn-success",
                  callback: function() {
                       $.ajax({    
                        "type" : "POST",
                        "url" : "finalBattleApprove",
                        "data" : {'username' : jsn.user_name},
                       success: function(data){
                           $('#example').html(data);
                           $('#loadingmessage').show();
                        }
                     });
                  }
                  },
            }
    }
  });
}
  stopTime = setTimeout(checkRequApprove,3000);

调节器

public function checkApproveReq(){
    $id = $this->session->userdata('userID');
    $requApprove = '1';
    $check = $this->lawmodel->checkRequApprove($id,$requApprove);
    foreach($check as $row){
        if($row->requApprove == '1')
        {
        $reqID = $this->lawmodel->getID($row->requestedID);
        foreach($reqID as $row){
        echo json_encode(
        array(
             'user_name' =>$row->username,
            )
        );
    }
    }
    else
    echo false;
    }
}

我有这段代码,其中有对数据库的实时检查,是否满足条件。.custom对话框将弹出。 我在checkRequApprove函数上遇到此问题。.如果在控制器中满足条件,则bootbox.dialog将不会显示...我相信我的问题是因为在控制器中echo json_encode 我找不到任何解决方案。我还是ajax的新手。

编辑后 ,自定义对话框仅在刷新页面后显示。

output是一个字符串-比较output == false将始终产生false,因为非空字符串始终为true(不考虑边缘情况“ 0”,在这种情况下,“ 0” == false产生true)。

代替

if(output==false){
   ...
}

它应该是:

if (!jsn){ // or jsn == false if you like that better
   ...
}

另外,您应该考虑不要在控制器中返回简单的值,而应始终返回正确的json对象,例如:

else{    // consider always using brackets, for more robustness
    echo
         array(
             'error' => true
            );
}

现在,在您的js中,您只需检查

if (jsn.error){
   ...
}

无论如何,您应该为json包含一个错误回调,以处理json请求中可能出现的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM