Являюсь начинающим разработчиком в yii2, столкнулся с проблемой: нужно обновить страницу после добавления данных в БД ajax'ом без полной перезагрузки страницы. Читал про Pjax, но не помогает он. Вот мой код:
Action:
Код: Выделить всё
public function actionIndex()
{
$model = new Realcomment();
if (\YIi::$app->request->isAjax)
{
$model->date_time = new Expression('NOW()');
if ($model->load(Yii::$app->request->post()) && $model->save())
{
$comments = Realcomment::getComments();
return $this->render('index', [
'model' => $model,
'comments' => $comments,
]);
}
}
$comments = Realcomment::getComments();
return $this->render('index', [
'model' => $model,
'comments' => $comments,
]);
}
Код: Выделить всё
<div class="realcomment-index">
<h1><?= Html::encode($this->title) ?></h1>
<div class="col-md-8 col-md-offset-2">
<div class="row">
<div class="col-lg-4">
<div class="panel panel-info">
<div class="panel-heading">Enter comment</div>
<div class="panel-body">
<div class="realcomment-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'nick')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'message')->textInput(['maxlength' => true]) ?>
<?= Html::submitButton('Send', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>
</div>
<div class="col-lg-8">
<div class="panel panel-primary">
<div class="panel-heading">Comments (<?= count($comments) ?> comments)</div>
<div class="panel-body" style="max-height: 350px; overflow: auto;">
<?php foreach ($comments as $comment): ?>
<div class="panel panel-default">
<div class="panel-heading">
<strong align="center"><?= $comment->nick ?></strong>
<span class="text-muted">
at
<?php
$date = new DateTime($comment->date_time);
echo $date->format('d M Y H:i');
?>
</span>
</div>
<div class="panel-body">
<?= $comment->message ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
$js = <<<JS
$('form').on('beforeSubmit', function(){
var data = $(this).serialize();
$.ajax({
url: '/realcomment/index',
type: 'POST',
data: data,
success: function(){
},
error: function(){
alert('Error!');
}
});
return false;
});
JS;
$this->registerJs($js);
?>