代码之家  ›  专栏  ›  技术社区  ›  Ahmed Kotb

cakephp基本Ajax表单问题

  •  2
  • Ahmed Kotb  · 技术社区  · 14 年前

    我尝试做一个简单的表单,使用Ajax在博客文章中添加一个新的注释(实际上这是cakephp教程的一部分)。

    但问题是提交按钮什么都不做

    下面是在 CTP 文件

    <?php echo $ajax->form('/comments/add', 'post', array('url' => '/comments/add', 'update' => 'PostsComments', 'indicator' => 'commentSaved'));?>
    <fieldset>
        <legend><?php __('Add Comment');?></legend>
            <?php  
                echo $form->hidden('Comment.post_id', array('value' => $post['Post']['id']));
                echo $form->input('Comment.name');
                echo $form->input('Comment.content');                            
            ?>
    </fieldset>
    <?php echo $form->end('Submit');?>
    

    下面是添加注释操作 注释\u controller.php

    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');
        }
    }      
    

    问题是没有从视图中调用“添加”操作…当我查看生成的HTML源代码时,我发现了类似的东西

    <form id="form304217296" onsubmit="event.returnValue = false; return false;" method="post" action="/php-cake/blog/comments/add"><fieldset style="display:none;">
    

    如果我手动删除了提交时的标记,那么将调用该操作,但添加成功.ctp将作为新页面生成,而不是作为Ajax调用生成。

    那么问题可能是什么呢?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Ahmed Kotb    14 年前

    我终于发现了问题

    在修复了这些错误之后,教程中有不止一个错误(Cakephp第8章从新手到专业人员),我发现另一个问题是Cakephp v1.2.6与最新版本的原型(v1.6.1)不兼容。 因为它在Firebug中给出了以下错误

    Event.observe is not a function
    

    所以我使用了1.6.0.3版的原型,问题解决了。

    有关本章中的错误列表,请参阅 this

        2
  •  0
  •   harpax    14 年前

    在视图/布局中是否包括原型和脚本库(这两者都是Ajax助手所必需的)?另外,如果您也使用jquery,那么它可能会受到干扰。