Ответ приходит всё верно, но замены содержимого контейнера не происходит.
Вывод делаю виджетом в модальном окне.
Код: Выделить всё
<?php
// '//layout/main.php'
Modal::begin([
'header' => '<h2>Hello world</h2>',
'toggleButton' => ['label' => 'Обратный звонок', 'class' => 'callback'],
]);
echo WContactForm::widget();
Modal::end();
?>
Код: Выделить всё
// Action
public function actionCallback()
{
if (Yii::$app->request->isAjax) {
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
Yii::$app->session->setFlash('contactFormSubmitted');
$send = $model->contact(Settings::getParam(2));
$status = ['send', $send];
if (!$status) {
Yii::$app->session->setFlash('contactFormFalse');
}
return $this->renderAjax('//forms/modal');
} else {
$errors = $model->getErrors();
exit(json_encode($errors));
}
} else {
throw new HttpException('403', 'Not Ajax');
}
}
Код: Выделить всё
<?php
// View
// '//forms/modal
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;
use yii\widgets\Pjax;
$title = 'Контакты';
?>
<?php Pjax::begin([
'id' => 'modalFormPjax',
'timeout' => false,
'enablePushState' => true,
'enableReplaceState' => true,
'formSelector' => 'contact-form'
]) ?>
<div class="com-xs-12">
<h1><?= Html::encode($title) ?></h1>
<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
<div class="alert alert-success">
Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее.
</div>
<?php elseif (Yii::$app->session->hasFlash('contactFormFalse')) : ?>
<div class="alert alert-warning">
Произошла ошибка при отправке сообщения!
</div>
<?php else: ?>
<?php $form = ActiveForm::begin([
'id' => 'contact-form',
'options' => ['class' => 'form-horizontal', 'data-pjax' => true],
'validationUrl' => 'site/callback',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'fieldConfig' => [ /* классы полей формы */
'template' => "<div class=\"col-lg-3\">{label}</div>\n<div class=\"col-lg-9\">{input}</div>\n<div class=\"col-lg-12 col-lg-offset-3 \">{error}</div>"
],
]); ?>
<div class="">
<?php
$form->errorSummary($model);
?>
</div>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
<?= Html::submitButton('Отправить сообщение', ['class' => 'btn btn-default center-block waves-effect btn-color-orange btn-color-orange-long', 'name' => 'contact-button']) ?>
<?php ActiveForm::end(); ?>
<?php endif; ?>
</div>
<?php Pjax::end() ?>
Когда форма модель не проходит валидацию и вызвращаем json (для наглядности, сейчас ответ ни как не влияет) скрипт Yii отрабатывют корректно и выставляет ошибки или подсвечивает зелёным.
Когда в action добираемся до render и приходит ответ, то скрипт не отрабатывает.
В поле 'body' происходит blur в action отправляем письмо и получаем ответ.
Код: Выделить всё
//request
<div id="modalFormPjax" data-pjax-container="" data-pjax-push-state data-pjax-replace-state> <div class="com-xs-12">
<h1>Контакты</h1>
<div class="alert alert-success">
Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее.
</div>
</div>
</div><script src="/assets/1d2a8dad/jquery.js"></script>
<script src="/assets/fc160f5d/yii.js"></script>
<script src="/assets/d10e8553/jquery.pjax.js"></script>
<script type="text/javascript">jQuery(document).pjax("#modalFormPjax a", {"push":true,"replace":true,"timeout":false,"scrollTo":false,"container":"#modalFormPjax"});
jQuery(document).on("submit", "contact-form", function (event) {jQuery.pjax.submit(event, {"push":true,"replace":true,"timeout":false,"scrollTo":false,"container":"#modalFormPjax"});});</script>