Activeform Ajax Submit
Activeform Ajax Submit
Как отправить данные формы с помощью Ajax?
Пожалуйста, поделитесь нормальным примером для ActiveForm
Пожалуйста, поделитесь нормальным примером для ActiveForm
Re: Activeform Ajax Submit
Я все таки своими скриптами сабмиты делаю, еще с альфа-версий, и к релизу так никаких существенных изменеий пользоваться ивентами ActiveForm не заметила.
форма
Js (ну на самом деле это все виджетом универсально подключается)
Экшн создания
форма
Код: Выделить всё
<?php
$form = ActiveForm::begin(
[
'id' => 'modalform',
'enableClientValidation' => true,
'enableAjaxValidation' => false,
'action' => ($model->isNewRecord
? \yii\helpers\Url::to(['create'])
: \yii\helpers\Url::to(
['update', 'id' => $model->{$model->getPk()}]
))
]
);
echo $form->errorSummary([$model]);
?>
<div id="resp_success" style="display: none" class="alert alert-success"></div>
<div id="resp_error" class="alert alert-danger" style="display: none"></div>
<?= $form->field($model, 'field1')->textInput() ?>
<?= $form->field($model, 'field2')->textInput() ?>
<div class="form-group">
<span class="pull-right">
<?= Html::a(Yii::t('backend', 'Cancel'),['index'],
[
'class' => 'btn btn-danger close_modal',
'id' => 'cancelmodal'
]
) ?></span>
<?= Html::submitButton(
$model->isNewRecord ? Yii::t('backend', 'Create') : Yii::t('backend', 'Update'),
[
'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary',
'id' => 'dirsubmit_' . ($model->isNewRecord ? 'addmodal' : 'updmodal')
]
) ?>
</div>
<?php ActiveForm::end(); ?>
Код: Выделить всё
$(document).on('click','#dirsubmit_addmodal',function (e) {
e.preventDefault();
$('#resp_success').hide();
$('#resp_error').hide();
var form=$(this).closest('form');$.post(form.attr('action'),form.serialize(),
function(resp){
if(resp.state==true){
jQuery('#resp_error').hide();
$('#resp_success').html('OK! Добавляйте следующее!').show();
form.trigger('reset');
$.pjax.reload({'container':'#GRID_PJAX_SELECTOR'});
}else{
jQuery('#resp_success').hide();
jQuery('#resp_error').html(resp.error).show();
}
});
});
$(document).on('click','#dirsubmit_updmodal',function (e) {
e.preventDefault();
$('#resp_success').hide();
$('#resp_error').hide();
var form=$(this).closest('form');
$.post(form.attr('action'),form.serialize(),
function(resp){
if(resp.state==true){
jQuery('#resp_error').hide();
$.themodal.close();
}else{
jQuery('#resp_success').hide(); jQuery('#resp_error').html(resp.error).show();
}
});
});
Код: Выделить всё
class CreateAction extends Action
{
/**
* @var \yii\db\ActiveRecord $modelClass
*/
public $modelClass;
/**
* @var \yii\web\Controller the controller that owns this action
*/
public $controller;
public function init()
{
if ($this->modelClass === null) {
throw new InvalidConfigException('"modelClass" cannot be empty.');
}
parent::init();
}
/**
* @inheritdoc
* @throws \yii\web\BadRequestHttpException
*/
public function run()
{
$model = new $this->modelClass;
$model->scenario = 'create';
if (Yii::$app->request->isPost) {
Yii::$app->response->format = (Yii::$app->request->isAjax) ? Response::FORMAT_JSON : Response::FORMAT_HTML;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return (Yii::$app->request->isAjax)
? ['state' => true, 'error' => '']
: $this->controller->redirect(
Url::to(['index'])
);
} else {
return (Yii::$app->request->isAjax) ? ['state' => false, 'error' => Helper::errorSummary($model)]
: $this->controller->render('create', ['model' => $model]);
}
} elseif (Yii::$app->request->isAjax) {
return $this->controller->renderAjax('_form', ['model' => $model]);
} else {
return $this->controller->render('create', ['model' => $model]);
}
}
}
Re: Activeform Ajax Submit
Интересная у Вас логика работы скрипта
Код: Выделить всё
if (Yii::$app->request->isPost) {...}
elseif (Yii::$app->request->isAjax) {...}
-
- Сообщения: 251
- Зарегистрирован: 2014.08.18, 14:01
Re: Activeform Ajax Submit
Можно через onclick
Код: Выделить всё
'class' => 'btn btn-danger',
'onclick' => "
$.ajax({
url: \"/group/default/empty\",
type: \"post\",
data: {lesson_id : 1},
success: function(response) {
window.location.reload(true);
}
});"
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
PJAX'ом никто не пользуется? А то я что не пойму по какому принципу рендерится представление в контроллере
Re: Activeform Ajax Submit
это кусок из проекта, где формы могут отображаться и как модальные с аякс-сабмитом, и как обычные страницы в зависимости от настроекfutbolim писал(а):Интересная у Вас логика работы скриптаКод: Выделить всё
if (Yii::$app->request->isPost) {...} elseif (Yii::$app->request->isAjax) {...}
Re: Activeform Ajax Submit
в принципе используется, но не для формchungachguk писал(а):PJAX'ом никто не пользуется? А то я что не пойму по какому принципу рендерится представление в контроллере
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
Печально. Вот для форм я примеров в инете не находил
Re: Activeform Ajax Submit
Я о том, что POST может прилетать посредством AJAX и обычно. Или все программисты команды знают и помнят, что AJAX-ом отправлять ТОЛЬКО GET?Insolita писал(а):это кусок из проекта, где формы могут отображаться и как модальные с аякс-сабмитом, и как обычные страницы в зависимости от настроекfutbolim писал(а):Интересная у Вас логика работы скриптаКод: Выделить всё
if (Yii::$app->request->isPost) {...} elseif (Yii::$app->request->isAjax) {...}
Напоминает это:
Код: Выделить всё
if($a = 1)
На пальцах:
Код: Выделить всё
if (Yii::$app->request->isPost) {...} // Если сюда прилетит AJAX POST-ом, он попадёт и сюда
elseif (Yii::$app->request->isAjax) {...} // и сюда
Re: Activeform Ajax Submit
какие вопросы по pjax и формам? пробовал, сделал кое-что
Re: Activeform Ajax Submit
$a=0
if (!$a){
$a=1
} elseif ($a ===1) {
не сработает, т.к. сработала первая часть if
}
if (!$a){
$a=1
} elseif ($a ===1) {
не сработает, т.к. сработала первая часть if
}
Re: Activeform Ajax Submit
>Я о том, что POST может прилетать посредством AJAX и обычно. Или все программисты команды знают и помнят, что AJAX-ом отправлять ТОЛЬКО GET?
Re: Activeform Ajax Submit
почему аяксом отправлять только гет - если запрос идёт POST он всегда попадает в первую ветку условия - не зависимо аякс или нет, и в ней учитываются оба варианта, дальше то код посмотритеfutbolim писал(а):
Я о том, что POST может прилетать посредством AJAX и обычно. Или все программисты команды знают и помнят, что AJAX-ом отправлять ТОЛЬКО GET?
Код: Выделить всё
if (Yii::$app->request->isPost) {
Yii::$app->response->format = (Yii::$app->request->isAjax) ? Response::FORMAT_JSON : Response::FORMAT_HTML;
...
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
В общем было что-то типа такого.zelenin писал(а):какие вопросы по pjax и формам? пробовал, сделал кое-что
Есть контроллер, в нём action в конце которого было обычное $this->render('page'). Делаю запрос на этот action и рендерится представление в котором было, что-то типа
Код: Выделить всё
Pjax::begin();
// Вывод ActiveForm
Pjax::end();
Код: Выделить всё
if (Yii::$app->request->isPjax) {
$this->render('page_ajax');
} else {
$this->render('page');
}
Re: Activeform Ajax Submit
стоило сделать $this->renderAjax('page_ajax')
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
Да? Спасибо. Надо будет не забыть. А то проникся магией yii2 и кажется, что даже в таком месте он уже за меня всё решил как надоInsolita писал(а):стоило сделать $this->renderAjax('page_ajax')
Re: Activeform Ajax Submit
метод render - рендерит вьюху со всеми скриптами и лейаутами
метод renderPartial - рендерит вьюху as is, метод renderAjax - промежуточный вариант рендерит вьюху без лейаута, но при этом подрубает css и скрипты. Просто проведите эксперимент - возьмите любой ваш экшн - и поменяйте render\renderAjax\renderPartial и сравните результаты, если в исходниках разбираться лень Хотя к теме это конечно не относится. еще зависит от того что в самом вашем page_ajax и еще иногда таймаут советуют ставить в настройках Pjax - это все-таки к тме pjax а не сабмит наверное
метод renderPartial - рендерит вьюху as is, метод renderAjax - промежуточный вариант рендерит вьюху без лейаута, но при этом подрубает css и скрипты. Просто проведите эксперимент - возьмите любой ваш экшн - и поменяйте render\renderAjax\renderPartial и сравните результаты, если в исходниках разбираться лень Хотя к теме это конечно не относится. еще зависит от того что в самом вашем page_ajax и еще иногда таймаут советуют ставить в настройках Pjax - это все-таки к тме pjax а не сабмит наверное
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
Кстати, попробовал. В контроллере обычный render, никаких изменений для обработки Ajax и вроде бы всё нормально рендерится. Т.е. при ajax запросе обновляется только сама форма, а не вся страница. Интересное кино
Re: Activeform Ajax Submit
https://github.com/yiisoft/yii2/blob/ma ... ax.php#L92 таки виджет чистит дополнительно страницу... значит если не всегда отрабатывает - таймаут увеличить-поставить
Последний раз редактировалось Insolita 2014.11.21, 18:30, всего редактировалось 1 раз.
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Activeform Ajax Submit
Не понял, что за дополнительная страница?