Ajax在Cakephp 2.2.3中不起作用

时间:2013-01-23 13:15:10

标签: ajax cakephp-2.2

我想在ContactUs表单上实现Ajax,这是我的代码。 控制器:

class ContactsController extends AppController {

public $layout = 'default';
public $helpers = array('Html', 'Form', 'Paginator','Js');
public $components = array('RequestHandler');

public function index(){
    if(!empty($this->data)){
        if($this->Contact->save($this->data)){
            if($this->RequestHandler->isAjax()){
                $this->render('success','ajax');
            } else {
            $this->Session->setFlash('Message sent');
            $this->redirect(array('action'=>'index'));
            }
        }
    }
}
}

查看档案

<?php echo $this->Html->script('jquery', FALSE); ?>
    <div id="success"></div>
    <h2>Contact Us</h2>

    <?php
            echo $this->Form->create();
            echo $this->Form->input('name',array('id'=>'name'));
            echo $this->Form->input('email',array('id'=>'email'));
            echo $this->Form->input('message',array('id'=>'message'));
            echo $this->Js->submit('Send',array(
                'before'=>$this->Js->get('#sending')->effect('fadeIn'),
                'success'=>$this->Js->get('#sending')->effect('fadeout'),
                'update'=>'#success'
            ));
            echo $this->Form->end();                
            ?>                
<div id="sending" style=" display: none;background-color: #90ee90;">Sending...</div>
view / layouts / ajax.ctp文件中的

包含:

<?php //echo $this->fetch('content'); ?>
<?php echo $content_for_layout; ?>

我尝试过这两种方法。 default.ctp布局包含在head部分:

echo $scripts_for_layout;
echo $this->Js->writeBuffer(array('cache'=>TRUE)); 
包含源文件jquery中的

但是PHPStorm在jquery文件中显示错误,并且firebug显示firebug shows

希望一切都清楚,任何帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

您应该在beforesuccess回调中停用缓冲区。

echo $this->Js->submit('Send',array(
    'before'=>$this->Js->get('#sending')->effect('fadeIn', array('buffer' => false)),
    'success'=>$this->Js->get('#sending')->effect('fadeOut', array('buffer' => false)),
    'update'=>'#success'
));

编辑: 输入错误也可能导致此问题:'fadeout'而不是'fadeOut'

答案 1 :(得分:0)

我遇到了完全相同的问题。我看到你正在使用Andrew Perkins的Cakephp教程(我使用完全相同的教程,所以我的代码是相同的)http://www.youtube.com/watch?v=dQ71psonQx0

我认为问题在于他根据Cakephp 1.3制作了这个视频教程。 2.0中的语法发生了很大变化。我还没弄清楚如何让它在2.2.3中运行,但我认为这就是原因。