【发布时间】:2016-09-10 16:54:08
【问题描述】:
我试图让 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 路由和视图。
【问题讨论】:
-
您的操作方法是正确的,只是不要忘记在方法的开头添加:$this->autoRender=false; .但是我不知道这是在 cakephp 3 中使用 ajax 的正确方法。这篇文章可能会有所帮助:dereuromark.de/2014/01/09/ajax-and-cakephp
-
@user3078643 建议的文章适用于 cakephp 2.0 而不是 3.0。
-
@user221931 有一段关于 cakephp 3.x
标签: jquery ajax cakephp cakephp-3.0