Cakephp 3 Ajax请求来自控制器操作的响应

时间:2016-05-14 14:28:24

标签: jquery ajax cakephp cakephp-3.0

我试图让Cakephp 3在我调用它时向我的javascript函数发送json回复,但我不知道正确的方法来做它..

JS功能:

function add(){
        //serialize form data 
        var formData = $('#newquestion').serialize(); 
        //get form action 
        var formUrl = $(this).attr('action'); 
        $.ajax({ 
            type: 'POST', 
            url: formUrl,
            data: formData, 
            success: function(status){                 
                    console.log('content='+status);  
            }, 
            error: function(xhr,textStatus,error){ 
                alert(error); 

        } });  

}

CakePHP 3动作:

public function addajax(){      

        if ($this->request->is('ajax')) {       

            $status['msg']="this is a message from cake controller";                
            $this->response->body(json_encode($status));

            return $this->response;

        }
}

问题: 上面的cakephp动作起作用并发送正确的输出,但是是否正确; 我不是想使用ajax视图或ajax布局吗?

当我使用如下序列化时它不起作用,在javascript函数函数中显示为“未定义”。我究竟做错了什么?什么是正确的方法呢?

以下示例也不正确吗?

public function addajax(){      

        if ($this->request->is('ajax')) {       
            //$this->viewBuilder()->layout('ajax');         
            //$this->autoRender = false; // Set Render False    


            $status['msg']="this is a message from cake controller";            

            $this->set(compact('status'));
            $this->set('_serialize', ['status']);


            //$this->response->body(json_encode($status));
            //return $this->response;

        }
    }

PS:我已经启用了JSON和XML路由和视图。

2 个答案:

答案 0 :(得分:1)

$this->response->withType('application/json')->withStringBody(json_encode($format));

$format是您的数组。

答案 1 :(得分:-1)

你将通过json发送php数组,然后你在php中编码一个数组并在js函数中解析响应

CakePhp 3操作

中尝试此操作
public function addajax(){ 

    $this -> autoRender = false;     

    if ($this -> request -> is('ajax')) {       

        $status['msg']= "this is a message from cake controller";            

        return json_encode($status);

    }
}

JS功能:

function add(){
    //serialize form data 
    var formData = $('#newquestion').serialize(); 
    //get form action 
    var formUrl = $(this).attr('action'); 
    $.ajax({ 
        type: 'POST', 
        url: formUrl,
        data: formData, 
        success: function(status){  
            var json = JSON.parse(status);             
            console.log('content='+json.msg);  // .msg is name of your index $status['msg']
        }, 
        error: function(xhr,textStatus,error){ 
            alert(error); 
        } 
    });  
}