我正在尝试在我的博客的评论部分实现Ajax功能。我已下载prototype-1.6.0.3.js并将其放在webroot内的js文件夹中。 我在布局文件(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>
我在comments_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时,我遇到了问题。
问题在哪里?伙计们,抱歉这么长的问题。[:(]
答案 0 :(得分:1)
你是否安装了firebug,以便你可以测试它是否正在发出ajax请求?
也许尝试做$ form-&gt; submit('Add Comment');生成按钮,看看它是否有所作为,并实际执行ajax请求。
你有任何javascript错误?
答案 1 :(得分:0)
看起来您正在关注"Beginning CakePHP"中的示例我认为我也犯了同样的错误
书中没有提到,但.js文件的名称(在webroot / js中)必须与辅助函数参数匹配,所以一个:
1)将prototype-1.6.0.3.js(在你的webroot / js文件夹中)重命名为prototype.js
OR
2)将帮助函数更改为
$javascript->link(array('prototype-1.6.0.3'));
答案 2 :(得分:0)
如果我没记错的话,你还需要包含scriptaculous,以便内置的ajax函数也能正常工作......
答案 3 :(得分:0)
这不是一个真正的答案,但我认为值得一提的是我也遇到了这个问题。是的我正在使用@smchacko提到的那本书。我正在使用Prototype Version 1.7:
//this is how I called it and renamed it to prototype
<?php echo $javascript->link( array('prototype')); ?>
有趣的是,我提到了我的火虫以及网络Developer tool bar。 Firebug没有返回任何错误,但Chris Pederic的插件有几个警告......太多了,无法提及。这会显示在屏幕的右上角