提交ajax add动作后,CakePHP取消重定向到视图

时间:2010-08-16 12:42:56

标签: jquery ajax cakephp

我正在尝试通过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之前完成的,因为警报实际上从未实现过。因此,直接从控制器动作“添加”确定重定向。

3 个答案:

答案 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元素是表单还是按钮?