Я использую CakePHP 1.3 и пытаюсь создать простую проводку сообщений с помощью ajax. Я пытаюсь использовать помощник Js для отправки формы на индексной странице, а затем обновить div доски объявлений, чтобы включить новое сообщение. Это все на одной странице.Действие не работает с CakePHP Js-> submit()
Я ранее публиковал это, но я хотел перефразировать вопрос и включить некоторые обновления. Предыдущий вопрос можно увидеть здесь How to use Js->submit() in CakePHP?
Когда я вернулся к этому проекту через пару дней, я сразу же протестировал и обработал форму (вроде). Отправка формы добавила сообщение в базу данных (она не отобразила сообщение, но я еще не напал на эту часть). Он работал 2 раза, добавив 2 сообщения. Затем я открыл файл контроллера и закомментировал некоторый код отладки, и он перестал работать. Похоже, действие не вызывается.
Вот мой messages_controller.php:
<?php
class MessagesController extends AppController {
function index() {
$messages = $this->Message->find('all');
$this->set('messages',$messages);
}
function add() {
$this->autoRender = false;
$this->Session->setFlash('Add action called');
if($this->RequestHandler->isAjax()) {
$this->Session->setFlash('Ajax request made');
$this->layout = 'ajax';
if(!empty($this->data)) {
if($this->Message->save($this->data)) {
$this->Session->setFlash('Your Message has been posted');
}
}
}
}
}
?>
Вот index.ctp для моего класса Message
<div id="guestbook" class="section_box">
<h3 id="toggle_guestbook"><div class="toggle_arrow"></div>Sign our Guestbook</h3>
<?php
echo $this->Form->create('Message');
echo $this->Form->input('name', array('label' => 'From:'));
echo $this->Form->input('text', array('label' => 'Message:'));
echo $this->Js->submit('Post Your Message', array(
'url' => array(
'controller' => 'messages',
'action' => 'add'
),
'update' => '#message_board'
));
echo $this->Form->end();
echo $this->Js->writeBuffer(array('inline' => 'true'));
?>
<div id="message_board">
<?php foreach($messages as $message) { ?>
<div class="message">
<p class="message_txt">
<?php echo $message['Message']['text']; ?>
</p>
<div>
<div class="message_name">
<?php echo $message['Message']['name']; ?>
</div>
<div class="message_date">
<small>
<?php echo $message['Message']['date']; ?>
</small>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
Когда кнопка нажата представить, я могу видеть в консоли, что POST составляет http://localhost/messages/add с правильными данными. Но, похоже, ответа нет. Всплывающее сообщение «Добавить действие» не устанавливается с контроллера (или любого из флэш-сообщений, если на то пошло), а содержимое #message_board опустошено.
Если я обновляю страницу в этот момент, появляется сообщение SECOND flash («Ajax request made»), и содержимое #message_board восстанавливается. Однако новое сообщение не было сохранено, его те же 2 сообщения от ранее.
Я в тупике. У меня есть чувство, может быть, есть большие проблемы, вызывающие мою проблему, но я не вижу этого. Любая помощь будет оценена по достоинству.