簡體   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