@KevinSmash

Как правильно составить Ajax запрос?

Здравствуйте, я новичек в Yii, создал DatePicker, но его значения когда обновляю, не обновляются в базе. Пробовал составить ajax запрос, но видимо не понимаю что то.

[
                    'label' => 'Дата начала подписки',
                        'value' => function ($model, $key, $value) {
                         return  \kartik\date\DatePicker::widget([
                            'name' => 'date_subscription',
                            'model' => $model,
                             'value' => $model->date_subscription,
                             'type' => DatePicker::TYPE_INPUT,
                            'pluginOptions' => [
                        'format' => 'yyyy-mm-dd',
                        'autoclose' => true,
                            ],
                         ]);
                         },
            'format' => 'raw',
                ],


$(".krajee-datepicker.form-control").blur(function() {
                 jQuery.ajax({
                     url: '/admin/clients/date-subscription',
                     type: 'post',
                     contentType: 'application/x-www-form-urlencoded',
                     async: true,
                     dataType: 'html',
                     data: {
                         data: this.value

                     },
                     success: function (data) {
                         alert(data);
                     },
                     error: function () {
                         alert("Error");
                         location.reload();
                     }
                 });
             });
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
В общем ситуация такая...
Как в самом виджете прикрутить ajax запрос я не знаю.
Но можно сделать так:
в GridView добавляем 'contentOptions', задаём параметры ajax запроса и отправляем на сервер.
[
    'label' => 'Дата начала подписки',
    'value' => function ($model, $key, $value) {
        return  \kartik\date\DatePicker::widget([
            'name' => 'date_subscription',
            'model' => $model,
            'value' => date('d-m-Y',$model->created_at),
            'type' => DatePicker::TYPE_INPUT,
            'pluginOptions' => [
                'format' => 'yyyy-mm-dd',
                'autoclose' => true,
            ],
        ]);
    },
    'contentOptions' => [
        'onchange' => '
            var Id = $(this).parent().attr("data-key");
            var uDate = $(this).children("input").val();
            console.log(Id + " - " + uDate);
            $.ajax({
               url: "'. Url::to('user/default/ajax-request') .'",
               type: "POST",
               data:{id: Id, date: uDate},
               success: function(data){
                  console.log(data)
               }
            })
        '
    ],
    'format' => 'raw',
],

В контролере создаём действие, которое будет обновлять данные для определённого пользователя.
public function actionAjaxRequest()
{
    if(Yii::$app->request->isAjax){
        $newDate = Yii::$app->request->post('date');
        $uId = Yii::$app->request->post('id');
        if(($model = Users::findOne(['id' => $uId])) != null){
            $model->created_at = strtotime($newDate);
            if(!$model->update(false,['created_at'])){
                return 'Данные не обновились.';
            }
            else{
                return 'Данные успешно обновились.';
            }
        }
        else{
            return 'Пользователь не найден.';
        }
    }
    return false;
}

Это упрощённый, но рабочий вариант. Вам необходимо поменять все переменные, пути, модели на свои, чтобы потом не говорили, что что-то там у Вас не работает. Всё работает, прежде чем писать ответ я проверил.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы