Я пытаюсь реализовать функцию Ajax в разделе комментариев моего блога. Я загрузил prototype-1.6.0.3.js и разместил его в папке js внутри webroot. Я внес следующие изменения в файл макета (default.ctp)
$javascript->link(array('prototype'));
Кроме того, к контроллерам добавлен следующий код
var $helpers = array('Html', 'Form', 'Ajax','Javascript');
Это мой код в файле posts_controller.php
function view($id = null) { if (!$id) { $this->Session->setFlash(__('Invalid Post.', true)); $this->redirect(array('action'=>'index')); } $post = $this->Post->read(null,$id); $comments = $this->Post->Comment->find('all', array('conditions'=>array('Post.id'=>$id))); $this->set(compact('post','comments')); }
Мой код в файле view.ctp
<h2>Comments</h2> <div id="comments"> <?php foreach($comments as $comment): ?> <div class="comment"> <p><b><?php echo $comment['Comment']['name']; ?></b></p> <p><?php echo $comment['Comment']['content']; ?></p> </div> <?php endforeach; ?> <?php echo $ajax->form('/comments/add','post',array('update'=>'comments'));?> <?php echo $form->input('Comment.name');?> <?php echo $form->input('Comment.content');?> <?php echo $form->input('Comment.post_id',array('type'=>'hidden','value'=>$post['Post']['id']));?> <?php echo $form->end('Add Comment');?> </div>
Я добавил следующую функцию в comment_controller.php
function add() { if (!empty($this->data)) { $this->Comment->create(); if ($this->Comment->save($this->data)) { $comments = $this->Comment->find('all',array('conditions'=>array('post_id'=>$this->data['Comment']['post_id']),'recursive'=>-1); $this->set(compact('comments')); $this->render('add_success','ajax'); } else { $this->render('add_failure','ajax'); } } }
Далее следует код в файле add_success.ctp
<?php foreach($comments as $comment): ?> <div class="comment"> <p><b><?php echo $comment['Comment']['name'];?></b></p> <p><?php echo $comment['Comment']['content'];?></p> </div> <?php endforeach;?>
Теперь проблема в том, что я не могу добавлять комментарии. Ничего не происходит, когда я нажимаю кнопку добавления комментариев. Я вручную добавил комментарии в базу данных, и это работает. Но у меня возникают проблемы, когда я пытаюсь помочь Ajax Helper.
Где проблема? И ребята, извините за такой длинный вопрос. [:(]
У вас установлен firebug, чтобы вы могли проверить, выполняет ли он запрос ajax?
Возможно, попробуйте сделать $ form-> submit ('Добавить комментарий'); чтобы сгенерировать кнопку и посмотреть, имеет ли она значение и фактически выполняет запрос ajax.
Вы получаете ошибки javascript?
похоже, что вы следуете примеру из «Начало CakePHP». Думаю, я тоже сделал ту же ошибку
он не упоминается в книге, но имя файла .js (в webroot / js) должно соответствовать аргументу вспомогательной функции, поэтому выполните одно из следующих действий:
1) переименуйте prototype-1.6.0.3.js (внутри папки webroot / js) в prototype.js
ИЛИ
2) измените вспомогательную функцию на
$javascript->link(array('prototype-1.6.0.3'));
Если я правильно помню, вам также нужно включить scriptaculous для встроенных функций ajax, чтобы работать правильно тоже …
На самом деле это не ответ, но я думал, что стоит упомянуть, что я тоже столкнулся с этой проблемой. И да, я использую эту книгу, упомянутую @smchacko. Я использую Prototype Version 1.7 :
//this is how I called it and renamed it to prototype <?php echo $javascript->link( array('prototype')); ?>
Интересно отметить, что у меня есть ошибка огня, а также панель инструментов веб- разработчика . Firebug не возвращает никаких ошибок, но плагин Chris Pederic имеет несколько предупреждений … Его слишком много, чтобы упомянуть. Это отображается в правом верхнем углу экрана