2013-12-19 41 views
0

我有問題與JSON。有人可以告訴我爲什麼第一個選項有效,第二個不行? 第二種選擇是在其他控制器中工作,但不是在這個控制器中。CakePHP parserror與_serialize JSON響應

在數據庫中,我有名字表狀態,以及模型中CakePHP的 - 狀態 這是莫名其妙這種情況有關?

這裏的是我recieving

parsererror SyntaxError: JSON.parse: unexpected end of data 

我CakePHP的控制器功能選項1錯誤(工作):

 public function admin_add(){ 

     if($this->request->is('ajax')) 
     { 
      $this->autoRender = false; 
      $this->layout = 'ajax'; 
      $this->Status->create(); 
      if ($this->Status->save($this->request->data)){ 
       $statuses = $this->Status->findById($this->Status->id); 
       $message = "Status has been added"; 
       $status = "OK"; 
       //$this->set(compact("message",'status','statuses')); 
       //$this->set('_serialize',array('message','status','statuses')); 

       echo json_encode(array(
         'statuses' => $statuses, 
         'message' =>$message, 
         'status' => $status 
        )); 
      } 
     } 
    } 

其次不工作: 公共職能admin_add( ){

 if($this->request->is('ajax')) 
     { 
      $this->autoRender = false; 
      $this->layout = 'ajax'; 
      $this->Status->create(); 
      if ($this->Status->save($this->request->data)){ 
       $statuses = $this->Status->findById($this->Status->id); 
       $message = "Status has been added"; 
       $status = "OK"; 

       $this->set(compact("message",'status','statuses')); 
       $this->set('_serialize',array('message','status','statuses')); 

       /*echo json_encode(array(
         'statuses' => $statuses, 
         'message' =>$message, 
         'status' => $status 
        ));*/ 
      } 
     } 
    } 

我的Ajax調用:

$.ajax({ 
    type: "post", 
    url : location.pathname+"/add", 
    data: data, 
    dataType: "json", 
    success : function(resp){ //some actions here } 

我不知道爲什麼一套標準('_連載,...)方法不能正常工作:(

+0

將_serialize定義爲數組具有在使用XmlView時自動附加頂級元素的附加好處。如果您爲_serialize和XmlView使用字符串值,請確保您的視圖變量具有單個頂級元素。沒有一個頂級元素,Xml將無法生成。 - 可能導致它返回其他東西(xml) – HellBaby

+0

使用json擴展調用url也很重要:action.json - 否則你的序列化方法將失敗。而且你沒有充分利用蛋糕休息響應的全部潛力。 – mark

回答

1

我不知道爲什麼一套標準(「_serialize,...)方法工作不正常 :(

但我:你加RequestHandlerComponent在侑AppController的?

你不必調用

$this->autoRender = false; 
    $this->layout = 'ajax'; 

這爲好,RequestHandler會照顧它。

+0

我確實有RequestHandler,_serialize在其他控制器中工作,但不在這個控制器中。 – elharion

1

檢查您的CakePHP版本。我在2.4.2版本中遇到了這個問題,並通過升級到2.4.3來修復它。