我试图让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路由和视图。
答案 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);
}
});
}