Как передать AJAX'ом данные из DatePicker в контроллер yii2

220
20 февраля 2018, 07:38

DatePicker создается следующим кодом:

$form->field($model, 'cdate')->widget(DatePicker::className(), ['clientOptions' =>
        ['dateFormat' => 'd MM yy'],
        'options' => ['class' => 'col-md-2',
            'onChange' => '$("#btn_submit").prop(\'disabled\',\'disabled\')',
        ],
    ])
    ->label(FALSE)
    ->textInput(['placeholder' => 'Я плейсхолдер', 'value' => $today]);

Он создается в представлении которое рендерит функция actionIndex в контроллере. В этом action есть две переменные, сейчас они выглядят вот так

$formatter = \Yii::$app->formatter;
//сегодняшний день
$dateDay = $formatter->asDate('now', 'dd');
//текущий месяц
$dateMonth = $formatter->asDate('now', 'MM');

Как я могу данные с DatePicker'a без перезагрузки страницы передать в эти переменные?

UPD: я все починил, сделал в представлении вот так:

'onSelect' => new \yii\web\JsExpression('function (date, instance) {
 $.ajax({
 type: \'POST\',
 url: \'index\',
 data: \'date=\' + date,
 success: function (result) {
       console.log(\'success\' + \' \' + date)
   },
});

В инструментах разработчика приходит следующее:

Но при этом

$userDate = Yii::$app->request->post();
var_dump($userDate);

всегда выводит array(0) { } даже если я делаю var_dump() в представлении, однако функция success срабатываем и в консоль выводится правильное время. Как можно получить данные из запроса?

Answer 1

Как вариант: можно задать в options данного виджета какой нибудь id или лучше data параметр.

Пример:

'options' => [
   'class' => 'col-md-2',
   'data-role' => 'datepicker-widget',
   'onChange' => '$("#btn_submit").prop(\'disabled\',\'disabled\')',
],

И затем создать обработчик на js который будет отлавливать изменение значения в виджете и отправлять аякс запрос.

Пример:

$(document).on('change', '[data-role=datepicker-widget]', function() {
   $.ajax({
      url: '/site/ajax', //путь до экшена к которому пойдёт обращение по ajax-у
      ...
   });
});
Answer 2

Не могу комментировать, так как нет 50 репутации. Вам нужно смотреть на var_dump() в панели разработчика. Скажите, пожалуйста, где Вы прописываете данный код:

$userDate = Yii::$app->request->post(); var_dump($userDate);

Вы должны прописать его в action, к которому обращается ajax, и тогда ответ с сервера можно будет наблюдать в панели разработчика. И в этом ответе вы увидите результат выполнения функции var_dump()

READ ALSO
Подключение к DB2 на z/OS из php

Подключение к DB2 на z/OS из php

Я новичок в ДБ2 и сходу натолкнулся на проблемы с подключениемИтоговая цель, надо подключиться к DB2 из php посредством odbc

216
Class php для форматирования json

Class php для форматирования json

Существует ли класс php для красивого форматирования JSON строки? Json получается очень большой и если записать в файл одной строкой, то будет...

139
mod_fcgid: stderr: PHP Notice: Undefined variable: name

mod_fcgid: stderr: PHP Notice: Undefined variable: name

Всем приветЕсть форма на сайте, в которую человек вбивает имя и телефон, дальше данные передаются по апи, но в файле записей появляются строчки...

159
Перемещение обьектов

Перемещение обьектов

В каких случаях компилятор неявно создает конструктор перемещения и соответствующий оператор присвоения?

143