2014-01-16 42 views
1

AJAX功能AJAX的setTimeout不工作json_encode

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; 
    } 
} 

我有这样的代码,其中有一个实时检查到数据库,如果条件满足。 。自定义对话框将弹出。 Im我的checkRequApprove函数有这个问题.. bootbox.dialog将不会显示,如果在控制器中遇到的条件... 我相信我的问题是因为在控制器中的哪个echo json_encode。我找不到.IM还在阿贾克斯一个新手..

EDITED 自定义对话框我刷新页面后,将只显示任何解决方案。

+0

成功回调是否被触发? – epascarello

+0

不能告诉,因为bootbox.dialog不会显示..当我试图将控制器中的'json_encode'更改为'echo $ id'时,对话框将显示..但我无法在我的回调中继续coz:将得到一个值从'json_encode'。 – Zurreal

+1

你不知道?一个简单的console.log()或断点告诉你。向Ajax调用添加一个错误处理程序。 – epascarello

回答

1

output是一个字符串 - 比较output == false总是会产生错误,因为非空字符串总是为真(在这种情况下,不考虑边界框“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请求可能出现的错误。

+0

谢谢!!你真的救了我一天! – Zurreal

+0

@Zurreal欢迎您;) – Christoph

0

好我的理解你想要的请求应在3秒后再试一次尝试,如果没有结果输出 那么你可以使用错误事件在这种情况下

$.ajax({ 
       type: "GET", 
       url: "FolderOpen.php", 
       data: {userid:10}, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        alert('success'); //clear timer here 
       }, 
       error: function() { 
        alert('error'); //set your timer here 
       } 
      }); 

在阿贾克斯

探索新功能
+0

为了这个工作,他需要在控制器中返回一个真正的jax错误,在json对象中返回错误仍然会触发成功回调。也不需要清除时间,因为它不是间隔,而是一次性超时。 – Christoph