Отправка данных ActiveForm через Ajax
-
- Сообщения: 62
- Зарегистрирован: 2014.01.29, 13:07
Отправка данных ActiveForm через Ajax
Всем доброго времени суток!
Если не сложно скиньте любой рабочий пример того как отправить данные из ActiveForm через Ajax, достаточно вьюшки и контроллера .
Понимаю что первым делом скажите "поиск на что?" - отвечаю ничего кроме решений такого типа http://www.yiiframework.ru/forum/viewtopic.php?t=16188 (от 12.01.14) за 3 дня не нашел.
А между тем свойство beforeSubmit в ActiveForm отсутствует (для версии yii 2.0.2).
Если не сложно скиньте любой рабочий пример того как отправить данные из ActiveForm через Ajax, достаточно вьюшки и контроллера .
Понимаю что первым делом скажите "поиск на что?" - отвечаю ничего кроме решений такого типа http://www.yiiframework.ru/forum/viewtopic.php?t=16188 (от 12.01.14) за 3 дня не нашел.
А между тем свойство beforeSubmit в ActiveForm отсутствует (для версии yii 2.0.2).
-
- Сообщения: 271
- Зарегистрирован: 2012.11.30, 07:33
Re: Отправка данных ActiveForm через Ajax
ActiveForm генреирует обычный html просто вместо submit button повесьте свой ajax postjekaspekas писал(а):Всем доброго времени суток!
Если не сложно скиньте любой рабочий пример того как отправить данные из ActiveForm через Ajax, достаточно вьюшки и контроллера .
Понимаю что первым делом скажите "поиск на что?" - отвечаю ничего кроме решений такого типа http://www.yiiframework.ru/forum/viewtopic.php?t=16188 (от 12.01.14) за 3 дня не нашел.
А между тем свойство beforeSubmit в ActiveForm отсутствует (для версии yii 2.0.2).
-
- Сообщения: 62
- Зарегистрирован: 2014.01.29, 13:07
Re: Отправка данных ActiveForm через Ajax
Спасибо!
Использовал виджет AjaxSubmitButton:
Думал есть различия для простой HTML формы и ActiveForm. Сейчас работает!
Использовал виджет AjaxSubmitButton:
Код: Выделить всё
use demogorgorn\ajax\AjaxSubmitButton;
//...
<div class="form-group">
<?php
AjaxSubmitButton::begin([
'label' => 'Сохранить',
'ajaxOptions' => [
'type' => 'POST',
'url' => 'update?id='.$model->id,
'success' => new \yii\web\JsExpression('function(html){
$("#output").html("Сохранено выполнено");
}'),
],
'options' => ['class' => 'btn btn-primary', 'type' => 'submit'],
]);
AjaxSubmitButton::end();
?>
<div id="output"></div>
</div>
Re: Отправка данных ActiveForm через Ajax
А разве нет этой реализации нативно?
2b||!2b Just read the instructions
Re: Отправка данных ActiveForm через Ajax
Да ладно? Т.е. нельзя ajaxом данные формы слать нативно?????
Re: Отправка данных ActiveForm через Ajax
Нативно код можно окружать в Pjax:
И не забыть в контроллере отменить редирект если это Pjax-запрос:
Код: Выделить всё
<?php Pjax::begin(['id' => 'my-pjax']); ?>
<?php if ($model->id): ?>
<p>Сохранено выполнено.</p>
<?php else: ?>
<?php $form = ActiveForm::begin(['options' => ['data-pjax' => true]]); ?>
<?= $form->field($orderForm, 'name') ?>
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
<?php endif; ?>
<?php Pjax::end(); ?>
Код: Выделить всё
public function actionCreate()
{
$model = new MyModel();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if (!Yii::$app->request->isPjax) {
return $this->redirect(['view', 'id' => $model->id]);
}
}
return $this->render('create', [
'model' => $model,
]);
}
Re: Отправка данных ActiveForm через Ajax
Дмитрий (ElisDN) спасибо! Как всегда кратко и по делу)
Pjax воистину прекрасен! Сейчас как раз его заюзал на сайте с кучей форм в модальных окнах.
Pjax воистину прекрасен! Сейчас как раз его заюзал на сайте с кучей форм в модальных окнах.
Re: Отправка данных ActiveForm через Ajax
Пожалуйста! А у Вас на счёт вебинаров какие-нибудь предложения есть?
Re: Отправка данных ActiveForm через Ajax
по проще выбираешь ? или наших тем мало ?ElisDN писал(а):Пожалуйста! А у Вас на счёт вебинаров какие-нибудь предложения есть?
Re: Отправка данных ActiveForm через Ajax
Cреди параметров Pjax не совсем понял, как передать селектор, который необходимо изменить после выполнения submitElisDN писал(а):Нативно код можно окружать в Pjax:
Код: Выделить всё
<div class="comments">
....
</div>
<?php Pjax::begin(['id' => 'my-pjax','enablePushState' => false, 'linkSelector'=>'.comments']); ?>
<?php $form = ActiveForm::begin(['action' => '/comment/create', 'options' => ['data-pjax' => true]]); ?>
<?= $form->field($modelComment, 'text')->textarea(['rows' => 6]) ?>
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Отправка данных ActiveForm через Ajax
Код: Выделить всё
Pjax::begin(['id'=>'pjax-container-form']);
//form
Pjax::end();
Pjax::begin(['id'=>'pjax-container-comments']);
//comments
Pjax::end();
$this->reginsterJs('
$("#pjax-container-form").on("pjax:end", function() {
var url = "'.Url::toRoute(['/comments/list']).'";
$.pjax({url: url, container: '#pjax-container-comments'})
})
');
Re: Отправка данных ActiveForm через Ajax
Да, теперь блок с комментариями обновляется, но форма, всё равно заменяется, на то, что возвращает контроллер:Neuromance писал(а): хотя комменты вроде можно в pjax не оборачивать. Просто при вызове $.pjax использовать нужный селектор.
Код: Выделить всё
<div id="comments">
...
</div>
<?php Pjax::begin(['id' => 'my-pjax', 'enablePushState' => false]); ?>
<?php $form = ActiveForm::begin(['action' => '/comment/create', 'options' => ['data-pjax' => true]]); ?>
<?= $form->field($modelComment, 'text')->textarea(['rows' => 6]) ?>
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>
<?php
$this->registerJs('
$("#my-pjax").on("pjax:end", function() {
var url = "' . Url::toRoute(['/comment/list']) . '";
$.pjax({url: url, container: "#comments"});
})');
?>
Код: Выделить всё
public function actionCreate()
{
$model = new Comment();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if (!Yii::$app->request->isPjax) {
return $this->redirect(['view', 'id' => $model->id]);
}else{
return 'Комментарий успешно добавлен';
}
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Отправка данных ActiveForm через Ajax
Смысл pjax в том,что блок, обернутый в PJAX, обновляется полностью пришедшим ответом сервера. Поэтому возвращайте просто форму.
Код: Выделить всё
public function actionCreate()
{
$model = new Comment();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if (!Yii::$app->request->isPjax) {
return $this->redirect(['view', 'id' => $model->id]);
}
}
return $this->render('create', [
'model' => $model,
]);
}
Re: Отправка данных ActiveForm через Ajax
Хорошо. Спасибо.Neuromance писал(а):Смысл pjax в том,что блок, обернутый в PJAX, обновляется полностью пришедшим ответом сервера. Поэтому возвращайте просто форму.