CakePHP中的JSON响应采用不正确的值

时间:2013-09-14 12:40:26

标签: php arrays json cakephp

我正在尝试创建一个cakephp应用程序,我正在尝试通过JSON POST请求接收数组,将其保存在控制器中的本地数组中,并将该数组传递给json视图,在那里它只能给出一个json响应相同的数组。 我在routers.php中添加了mapresources和parseextensions。它使用POST Json请求给我一个200ok的响应,但是它没有将数据保存在本地数组中,而且还传递了一个附加了json响应的整个html页面。 这是我的控制者:

class UsersController extends AppController{

    public $components = array('RequestHandler');    
    public function index(){
     }

    public function add(){    
        if($this->request->is('post')){
       $data = $this->User->save($this->request->data);
                $this->set(array(
                'data' => $data,
                '_serialize' => array('data')
            ));
    }}}

我将json视图文件命名为add.ctp。这是/app/view/Users/JSON/add.ctp中的JSON视图:

<?php
echo json_encode($data);
?>

我的表用户最初以名称,密码电子邮件等形式保存用户数据。当我使用以下数据{{“firstname”:“abcrehd”命中url /lhosthost/FC/app/users.json时,会发生什么事情, “姓氏”: “sdfsdf”} 它基本上将数据存储在users表中,而不是将其保存在本地数组中,并将用户数据+其他空列作为附加了长html页面的json响应传递。我的问题是:  1.如何将json响应存储在本地数组中?  2.如何将该数组传递给json视图?  3.如何在json响应中收回该数组?

请帮帮我。我一直坚持这个!谢谢:))

2 个答案:

答案 0 :(得分:0)

我在我之上的优秀人士的帮助下找到了答案:

$data=$this->request->input('json_decode');

这会将post json请求保存到名为$ data的变量中。

$this->set(array(
                          'data' => $data,
              '_serialize' => array('data')));

正如上面指出的标记,你不需要在布局或视图/ json等中的视图... serialize就足够了。如果你使用postin的标准cakephp格式,上面的代码将发回一个json响应在带有.json后缀的url中,并使方法名称为add()

谢谢你的帮助!

答案 1 :(得分:-1)

如果我理解得很好:

public function add(){
if($this->request->is('post') || $this->request->is('ajax')){
    if ($this->User->save($this->request->data)) {
                 $this->layout='Ajax' ;
                 /* another actions ..... */
                 $this->set(data,$this->request->data) ; // it's no need i think it will be accessible in view!
                 $this->render('jasonView') ;
    }
}
}