2011-03-04 46 views
0

我有一個cakephp代碼與數據庫一起工作,以搜索給定的卡號,並返回餘額。 jQuery代碼看起來像這樣。CakePHP的jquery調試信息裏面的ajax響應

function subm(event){ 
    $.ajax({ 
    type: "POST", 
    //contentType: "application/json; charset=utf-8", 
    dataType:'json',  
    url:"\/balances\/balance", 
    data:$("#button_check_balance").closest("form").serialize(), 
    cache: false,     
    beforeSend:function(){        
     $("#loadingDiv").show(1000); 
    }, 
    success:function (data, textStatus,xhr) { 
     $("#loadingDivision").hide(1000); 
     alert("balance is "+data.balance); 
     return false; 
    }, 
    //failure: function(msg){alert(msg);}, 
    error: function(xhr, ajaxOptions, thrownError){ 
     $("#loadingDivision").hide(1000); 
     alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status); 
     console.log(xhr.responseText); 
    }, 
    /*complete: function(){ 
     alert("complete"); 
    },*/ 

}); 

我有balancesController和balance.ctp文件,控制器邏輯看起來像這樣。

function balance() { 
    $message = ""; 
    $error = ""; 
    $this->layout = 'ajax'; //layout should be ajax based on 
    Configure::write('debug', 0); 
    //gets the submitted card number 
    $card_id = $this->data['balances']['cardId']; //entered card id of the emp 
    if (!empty($this->data)) { 
     $this->header('Content-Type: application/json'); 
     try { 
      $card = $this->Card->getBalance($card_id); 
     } catch (Exception $e) {    
      $error = "balance not available"; 
      $resp = json_encode(array('error' => $error)); 
      echo $resp; 
      exit; 
     } 
     if ($this->RequestHandler->isAjax()) { 
      $this->autoRender = $this->layout = false; 
      $resp = json_encode(array('cardData' => $cardObj); 
      echo $resp; 
      exit; 
     } 
    } 
} 

個問題,我有是 - 當出現平衡不可用錯誤「我得到在我的Ajax響應蛋糕DEBUG INFOMATION。」

如 - 當我嘗試使用「xhr.responseText」我得到了長時間的輸出由 <pre class="cake-debug">訪問XHR對象錯誤函數中對阿賈克斯$事件 ..........和這個唯一的結局我得到了我編碼成json的錯誤。我已經使用Configure :: write('debug',1);和Configure :: write('debug',0);沒有任何運氣。你可以看到我使用Configure :: write('debug',0);在我的控制器功能頂部以及.. 請指教我解決這個問題。所有的輸入都非常感謝。

回答

0

如果您收到調試消息,這意味着您的代碼中有錯誤,您應該修復它而不是隱藏它。閱讀錯誤信息(或將其粘貼到此處)以找出並解決問題

您正在使用throw/catch。 Cake通常不會使用異常來處理錯誤,除非您已經專門編寫了模型來引發異常,否則將不會捕獲錯誤狀態。可能$卡只是返回false。

請將您的錯誤粘貼到這裏,如果它真的很長,請在pastebin上粘貼。

+0

嗨JohnP,首先thanx很多回復。我對cakephp相當陌生,因爲我一直在Java背景下工作一段時間..我期望PHP異常處理是在java的水平......我現在明白的是它不能達到這個水平。我已經添加了一個代碼來使用'$ cardObj = $ this-> Card-> getNewBalance($ card_id);'然後訪問返回的對象的屬性..使用'$ name = $ cardObj [0] ['名稱']'....當沒有可用的搜索結果....訪問cardObject數組失敗 – Sanath 2011-03-07 08:38:47

+0

@Sanath,PHP確實有異常處理,但CakePHP不使用異常。你可以添加你在pastebin上得到的錯誤嗎?很可能你正在訪問一個數組元素而不檢查它是否存在。 Cake沒有找到可以返回false,從而導致代碼中斷 – JohnP 2011-03-07 08:38:49