【发布时间】:2011-04-23 13:08:48
【问题描述】:
我试图在 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>
这里是控制器动作:
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');
}
}
}
}
奇怪的是,当我提交表单时发生的事情是表单的精确副本,并且其包含的 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;
});
});
【问题讨论】:
-
我的印象是 cake 中的整个 Js 对象都在不断变化。我会密切关注这个问题,看看你会发现什么。
-
我已经就同一主题提出了另一个问题,对该问题进行了更详细的描述,并提供了更好的解决方案。在这里查看stackoverflow.com/questions/3947027/…