带有_serialize的CakePHP parserror用于JSON响应

时间:2013-12-19 12:13:31

标签: php jquery ajax json cakephp

我遇到JSON问题。有人能告诉我为什么第一个选项有效,第二个没有? 第二个选项在每个其他控制器中工作,但不在此控制器中。

在数据库中我有名称状态的表格,以及CakePHP中的模型 - 状态 这在某种程度上与这种情况有关吗?

这是我收到的错误

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 }

我不知道为什么标准集('_ serialize,...)方法无法正常工作:(

2 个答案:

答案 0 :(得分:2)

  

我不知道为什么标准集('_ serialize,...)方法不起作用   适当地:(

但我有:你是否在你的AppController中添加了RequestHandlerComponent?

您无需致电

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

同样,RequestHandler会处理它。

答案 1 :(得分:1)

检查您的CakePHP版本。我在版本2.4.2中遇到了这个问题,并通过升级到2.4.3修复了它。