JsHelper и Ajax не работают в Cakephp - PullRequest
2 голосов
/ 26 декабря 2011

Я серьезно не могу понять, что здесь происходит! 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');   
                }
            }
        }
    }

}

?> и вот мой взгляд:

<?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 ]

1 голос
/ 26 декабря 2011

Попробуйте:

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

Надеюсь, это поможет

0 голосов
/ 07 марта 2013

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

в конце данные сохраняются в базе данных, но я не могу получить ответ на стороне клиента, поэтому я тоже помогаю в этом

0 голосов
/ 31 января 2012

Поскольку JsHelper автоматически буферизирует все сгенерированное содержимое сценария, чтобы уменьшить количество тегов в исходном коде, вы должны вызвать, чтобы записать буфер.В нижней части вашего просмотра файла.Не забудьте указать:

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

Если вы не укажете это, вы не сможете связать звенья нумерации страниц AJAX.Когда вы пишете буфер, он также очищается, поэтому вам не нужно беспокоиться о том, что один и тот же Javascript выводится дважды.

CakePHP 2.0 cookbook

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...