首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ajax setTimeout不工作于json_encode

ajax setTimeout不工作于json_encode
EN

Stack Overflow用户
提问于 2014-01-16 13:57:10
回答 1查看 125关注 0票数 1

AJAX函数

代码语言:javascript
运行
复制
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);

控制器

代码语言:javascript
运行
复制
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;
    }
}

我有这段代码,其中有一个对数据库的实时检查,如果条件有meet..custom对话框,就会弹出。我在我的checkRequApprove function..The bootbox.dialog上有这个问题,如果控制器满足条件,它就不会出现.我相信我的问题是因为控制器中的echo json_encode。我找不到任何解决方案,.im仍然是ajax的新手。

编辑的自定义对话框只有在我刷新页面后才会显示。

EN

Stack Overflow用户

回答已采纳

发布于 2014-01-16 14:23:01

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

而不是

代码语言:javascript
运行
复制
if(output==false){
   ...
}

它应该是:

代码语言:javascript
运行
复制
if (!jsn){ // or jsn == false if you like that better
   ...
}

此外,您还应该考虑在控制器中不返回一个简单的值,但是始终返回一个适当的json对象,如:

代码语言:javascript
运行
复制
else{    // consider always using brackets, for more robustness
    echo
         array(
             'error' => true
            );
}

现在,在你的js里你只需要检查一下

代码语言:javascript
运行
复制
if (jsn.error){
   ...
}

在任何情况下,您都应该为您的json包含一个错误回调,以便使用json请求处理可能的错误。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21163781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档