JsHelper和Ajax在Cakephp中不起作用

时间:2011-12-26 10:46:51

标签: ajax cakephp

我真的可以'理解这里发生了什么!Jquery根本不工作!脚本正在生成和所有内容。但是当我点击提交按钮时,它遵循与没有jquery和ajax相同的过程。 请帮忙 !谢谢。 这是我的,控制器:

class MessagesController extends AppController{

    public  $helpers=array('Js'=>array('Jquery'));
    public $components = array('RequestHandler');

    public function index(){
        if(!empty($this->data)){
            if($this->Message->save($this->data)){
                if($this->RequestHandler->isAjax()){
                    $this->render('success','ajax');
                    $this->Session->setFlash('Ajax');   
                }
            }
        }
    }

}

&GT?; 这是我的观点:

<?php echo  $this->Html->script('jquery',FALSE); ?>
<?php
echo $this->Form->create();
echo $this->Form->input('name',array('id'=>'id'));
echo $this->Form->input('email',array('id'=>'email'));
echo $this->Form->input('message',array('id'=>'message'));
echo $this->Js->submit('Submit',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:green" >Sending...</div>
<div id="success"></div>

这是正在生成的javascript文件,

$("#submit-84782947").bind("click", function (event) {$.ajax({beforeSend:function                   (XMLHttpRequest) {$("#sending").fadeIn();}, complete:function (XMLHttpRequest, textStatus) {$("#sending").fadeOut();}, data:$("#submit-84782947").closest("form").serialize(),   dataType:"html", success:function (data, textStatus) {$("#success").html(data);},       type:"post", url:"\/Cake\/messages"});

return false;});

正如我注意到生成文件中没有$(document).ready东西,这可能是问题吗?

3 个答案:

答案 0 :(得分:1)

尝试:

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

));
//if that doesnot work then checkout:

CakePHP Ajax Helper

希望有所帮助

答案 1 :(得分:0)

  

由于JsHelper会自动缓冲所有生成的脚本内容   要减少源代码中的标记数量,必须   调用写缓冲区。在视图文件的底部。务必   包括:

<?php
echo $this->Js->writeBuffer();
  

如果省略此项,您将无法链接ajax分页链接。   当你写缓冲区时,它也被清除,所以你不必担心   关于相同的Javascript输出两次。

CakePHP 2.0 cookbook

答案 2 :(得分:0)

cakephp 2.3 $this->RequestHandler->isAjax()中的

已弃用,现在为$this->Request->isAjax() 我正在尝试使用此视图文件执行相同的操作:

<?php echo $this->Form->create(); echo $this->Form->input('name');echo $this->Form->input('email'); echo $this->Form->input('phone'); echo $this->Form->input('message');   echo $this->Js->submit('Send Enquiry', array(
    'before' => $this->Js->get('#sending')->effect('fadeIn'),
    'success' => $this->Js->get('#sending')->effect('fadeOut'),
             'update' => '#success',
              'async' => true
               ));echo $this->Form->end(); ?>

和这个控制器功能:

public function add() {
    if ($this->request->is('post')) {
        $this->Contact->create();
        if ($this->Contact->save($this->request->data)) {

            if($this->request->isAjax()){
                $this->autoRender = false;  
                echo 'successful';
                }else{
            $this->Session->setFlash(__('The contact has been saved'));
            $this->redirect(array('action' => 'index'));
                }
        } else {
            $this->Session->setFlash(__('The contact could not be saved. Please, try again.'));
        }
    }
}

最后,数据被保存到数据库但是我无法得到客户端的响应所以我也对此有所帮助