我正在尝试通过AJAX提交表单,并在提交表单后阻止重定向。我不明白为什么我遇到这个问题,因为我将autoRender设置为false。
控制器代码
function add() {
$this->autoRender = false;
if (!empty($this->data)) {
$this->data['Comment']['user_id'] = $this->Auth->user('id');
$this->Comment->create();
if ($this->Comment->save($this->data)) {
}
}
}
JS事件处理程序
$(".submit_comment").live("submit",commentSubmitHandler);
function commentSubmitHandler(event){
$.ajax({
type: "post",
url: $("#webroot").val() + "comments/add",
data: data,
dataType: "json",
success: function(data){
alert("win");
},
error: function(data){
alert("fail");
}
});
return false;
}
表单数据提交并保存得很好,但为什么它离开页面呢?此外,它似乎是在完成js之前完成的,因为警报实际上从未实现过。因此,直接从控制器动作“添加”确定重定向。
答案 0 :(得分:3)
尝试在表单外添加提交js的链接,以测试提交是否以这种方式工作。如果是,则可能需要将类型=“提交”更改为类型=“按钮”。可能是“提交”按钮实际上是在提交表单。
另一种方法是验证<form>
标签是通过js提交的,而不是发布到控制器中的添加功能。
此外,通过清除tmp/cache/persistan
t中的缓存文件,检查以确保没有缓存任何内容(以防万一 - 我已经看到它发生了)。
答案 1 :(得分:2)
尝试放置$this->autoRender = false;
在保存或最后一行中...如
function add() {
if (!empty($this->data)) {
$this->data['Comment']['user_id'] = $this->Auth->user('id');
$this->Comment->create();
if ($this->Comment->save($this->data)) {
....
$this->autoRender = false;
}
}
}
答案 2 :(得分:1)
我怀疑您的表单正在提交,这让我觉得事件处理程序结束时的return false
语句没有按照您的想法执行。 .submit_comment
元素是表单还是按钮?