Я пытаюсь создать простую форму Ajax для доски объявлений в приложении CakePHP, но я не могу понять, как правильно использовать функцию 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 дублируется ВНУТРИ div_board сообщения.Weird.
Очевидно, я что-то упускаю (или несколько вещей).Если у кого-то есть идея или кто-то знает хороший источник информации о том, как ее использовать, это будет очень цениться.
Спасибо.
ОБНОВЛЕНИЕ: Я попытался добавить новую строку $this->layout = 'ajax';
к контроллеру (см. выше), но это не имело никакого эффекта.Вот вывод jquery от CakePHP, который может рассказать кому-то, что происходит.
$(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;
});
});