2014-01-16 44 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