[英]Problem with Ajax Helper in Cake PHP
我正在嘗試在博客的評論部分中實現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>
我在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('Add Comment'); 生成按鈕並查看它是否有所不同並實際執行ajax請求。
您收到任何JavaScript錯誤嗎?
看起來您正在按照“ Beginning CakePHP”中的示例進行操作,我想我也犯了相同的錯誤
書中沒有提到它,但是.js文件的名稱(在webroot / js中)必須與helper函數參數匹配,因此請執行以下操作之一 :
1)重命名prototype-1.6.0.3.js(在您的webroot / js文件夾中)到prototype.js
要么
2)將輔助功能更改為
$javascript->link(array('prototype-1.6.0.3'));
如果我沒記錯的話,您還需要包括scriptaculous,以便內置的ajax函數也能正常工作...
這並不是一個真正的答案,但我認為值得一提的是我也遇到了這個問題。 是的,我正在使用@smchacko提到的那本書。 我正在使用1.7版原型 :
//this is how I called it and renamed it to prototype
<?php echo $javascript->link( array('prototype')); ?>
有趣的是,我提到了Fire Bug和Web Developer工具欄 。 Firebug不會返回任何錯誤,但是Chris Pederic的插件有幾個警告...值得一提。 它出現在屏幕的右上方
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.