Intereting Posts
Как повторно использовать код для нескольких доменов? Auth :: user () возвращает null htaccess rewriterule и directoryindex Несоответствие второстепенных версий заголовков и клиентской библиотеки PHP sleep () не работает Как изменить поиск в WordPress, чтобы он запрашивал термины таксономии и термины категории? Как я могу проверить с регулярным выражением, что строка содержит только определенные допустимые символы? Как вернуть данные через Ajax с помощью Plupload при загрузке? Переменная перехода от компонента к области модели Каково регулярное выражение для проверки международного номера телефона в php или zend? Агрегирование покрытия кода из нескольких исполнений PHPUnit PHP Set и чтение строки cookie Возвратите пользователя на предыдущую страницу после входа в систему? AFNetworking 2.0 POST, ошибка Cocoa 3840 (текст JSON не начинался с массива …) Как расшифровать PHP-скрипт в Objective C / ios

CActiveForm и ajaxSubmitButton не работают

Это мой код:

<?php $form = $this->beginWidget('CActiveForm', array( 'id' => 'swim-subscribe-form', 'enableAjaxValidation' => true, 'action'=>"/mycontroller/myfunction" )); ?> <?php echo CHtml::ajaxSubmitButton('Save',array('/mycontroller/myfunction'),array( 'type'=>'POST', 'dataType'=>'post', 'success'=>'js:function(data){ }', )); $this->endWidget(); ?> 

Это мой контроллер:

 public actionMyFunction(){ $model = new MyModel; $this->performAjaxValidation($model); if ($model->save()) { $this->redirect('/another_controller'); } } protected function performAjaxValidation($model) { if (isset($_POST['ajax']) && $_POST['ajax'] === 'swim-subscriber-form') { echo CActiveForm::validate($model); Yii::app()->end(); } } 

Этот код так или иначе, он всегда выполняет мой url /mycontroller/myfunction . Он не показывает на моей консоли, что я вызываю /mycontroller/myfunction через ajax. Зачем ?

UPDATE Это то, что сгенерировало мой ajaxSubmitButton:

 <input name="yt0" value="Save" id="yt0" type="submit"> 

Это нормально ?

У вас есть опечатка в коде. В файле просмотра ID формы
'id' => 'swim-subscribe-form',

Но во время проверки ajax вы проверяете идентификатор
$_POST['ajax'] === 'swim-subscriber-form' // there is an extra R at the end of "subscriber"

Поэтому проверка ajax никогда не запускается, приложение yii никогда не заканчивается, и оно всегда считается отправкой.

Либо исправьте идентификаторы формы, либо удалите проверку идентификатора из проверки ajax в контроллере:

 if (isset($_POST['ajax']) && $_POST['ajax'] === 'swim-subscribe-form') { // this has to match with the form ID echo CActiveForm::validate($model); Yii::app()->end(); } 

ИЛИ

 if(Yii::app()->getRequest()->getIsAjaxRequest()) { echo CActiveForm::validate($model); Yii::app()->end(); } 

Проверка идентификатора формы полезна, если у вас есть несколько форм на странице (с тем же действием), и вы не хотите, чтобы ajax проверял каждую из них или если проверка ajax мешает другому запросу ajax к тому же действию. Я редко проверяю идентификатор формы во время проверки ajax.