如何在CakePHP中使用Js-> submit()?

Log*_*ist 4 forms ajax cakephp helper

我试图在CakePHP应用程序中为消息板创建一个简单的Ajax表单,但我不能在我的生活中弄清楚如何正确使用Js-> submit()函数通过Ajax提交表单.

下面是我视图中的表单代码:

<?php

 echo $this->Form->create('Message',array(
  'type' => 'post', 
  'action' => 'add',
  'onSubmit' => 'return false;'
 ));

 echo $this->Form->input('name', array('label' => 'From:'));
 echo $this->Form->input('text', array('label' => 'Message:'));

 echo $this->Js->submit('Post Your Message', array(
  'action' => 'add',
  'update' => '#message_board'
 ));

 echo $this->Form->end();

?>

<div id="message_board">
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

这是控制器动作:

function add() {
 $this->autoRender = false; 
 if($this->RequestHandler->isAjax()) {
     $this->layout = 'ajax'; //THIS LINE NEWLY ADDED
     if(!empty($this->data)) {
         if($this->Message->save($this->data)) {
             $this->Session->setFlash('Your Message has been posted');
         }
     }
 }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我提交表单时发生的是表单的精确副本,其包含的div在message_board div中重复.奇怪的.

显然我缺少一些东西(或几件事).如果有人有任何想法,或者知道如何使用它的良好信息来源,将非常感激.

谢谢.

更新:我尝试将新行添加$this->layout = 'ajax';到控制器(见上文),但它没有任何效果.这是CakePHP的jquery输出,可能会告诉某人最新情况.

$(document).ready(function () {
    $("#submit-707957402").bind("click", function (event) {
        $.ajax({
            action:"add", 
            data:$("#submit-707957402").closest("form").serialize(), 
            dataType:"html", 
            success:function (data, textStatus) {
                $("#message_board").html(data);
            }, 
            type:"post", 
            url:"\/messages"
        });
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

Ram*_*rro 5

它会加载default布局.您必须ajax使用以下行更改布局:

$this->layout = 'ajax';
Run Code Online (Sandbox Code Playgroud)

您在isAjax()条件中插入该行.

你的options阵列也有错误的格式.在action关键的应该是内部的url关键.

$this->Js->submit('Post Your Message', array(
        'url' => array(
            'action' => 'add'
        ),
        'update' => '#message_board'
    )
);
Run Code Online (Sandbox Code Playgroud)