Cake PHP中的Ajax Helper问题

时间:2009-08-13 12:22:28

标签: php cakephp

我正在尝试在我的博客的评论部分实现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时,我遇到了问题。

问题在哪里?伙计们,抱歉这么长的问题。[:(]

4 个答案:

答案 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的插件有几个警告......太多了,无法提及。这会显示在屏幕的右上角