Передача значения в поле «balls» с помощью AJAX в Yii2

Для того, чтобы при нажатии на кнопку «Занести балл» значение переносилось в поле с именем «balls» с помощью AJAX, можно использовать следующий подход:


1. Добавление JavaScript-кода на страницу

Сначала нужно добавить JavaScript-код, который будет обрабатывать клик на кнопке «Занести балл» и отправлять AJAX-запрос:

javascript

$(document).ready(function() {
    $('.btn-score').click(function() {
        var id_reestrzayvkistependiy = $(this).data('id');
        var balls = $(this).closest('.card-panel').find('input[name="balls"]').val();

        $.ajax({
            url: '<?= Url::to(['reestrzayvkistependiy/add']) ?>',
            type: 'POST',
            data: {
                'id_reestrzayvkistependiy': id_reestrzayvkistependiy,
                'balls': balls,
                '<?= Yii::$app->request->csrfParam ?>': '<?= Yii::$app->request->csrfToken ?>'
            },
            success: function(data) {
                // Обработка успешного ответа от сервера
                console.log('Балл успешно сохранен');
            },
            error: function(xhr, status, error) {
                // Обработка ошибки
                console.log('Ошибка при сохранении балла: ' + error);
            }
        });
    });
});


2. Изменение HTML-кода кнопки «Занести балл»

Теперь нужно изменить HTML-код кнопки «Занести балл», чтобы она могла работать с AJAX-запросом:

html

<button class="btn-score waves-effect waves-light btn-small" data-id="<?= $rz->id_reestrzayvkistependiy ?>">Занести балл</button>

Обратите внимание, что мы добавили атрибут data-id с идентификатором записи id_reestrzayvkistependiy.


3. Обработка AJAX-запроса в контроллере

В контроллере ReestrzayvkistependiyController нужно добавить действие add, которое будет обрабатывать AJAX-запрос:

php

public function actionAdd()
{
    $id_reestrzayvkistependiy = Yii::$app->request->post('id_reestrzayvkistependiy');
    $balls = Yii::$app->request->post('balls');

    $model = $this->findModel($id_reestrzayvkistependiy);
    $model->balls = $balls;
    $model->save();

    return $this->asJson(['success' => true]);
}

В этом действии мы получаем значения id_reestrzayvkistependiy и balls из POST-запроса, находим модель по id_reestrzayvkistependiy, обновляем значение balls и сохраняем изменения. Затем возвращаем JSON-ответ с информацией об успешном сохранении.

Да, можно использовать значение из $rz->portfolio->activework->balls и присвоить его элементу с атрибутом name="balls". Вот как это можно сделать:

html

<form action="<?= Url::to(['reestrzayvkistependiy/add']) ?>" method="post">
    <?= Html::hiddenInput(Yii::$app->request->csrfParam, Yii::$app->request->csrfToken) ?>
    <div class="input-field">
        <input type="text" name="balls" placeholder="Введите данные" value="<?= $rz->portfolio->activework->balls ?>">
        <input type="hidden" name="id_reestrzayvkistependiy" value="<?= $rz->id_reestrzayvkistependiy ?>">
        <input type="hidden" name="id_zayvkastependiy" value="<?= $rz->zayvkastependiy->id_zayvkastependiy ?>">
    </div>
    <button type="submit" class="waves-effect waves-light btn-small">Подписать</button>
</form>

В этом коде мы используем значение $rz->portfolio->activework->balls в качестве значения атрибута value для поля ввода с именем balls. Таким образом, при отображении формы, это значение будет предварительно заполнено в поле. Когда пользователь нажимает на кнопку «Подписать», значение из этого поля будет отправлено на сервер вместе с другими данными формы. Обратите внимание, что мы также добавили скрытые поля для id_reestrzayvkistependiy и id_zayvkastependiy, чтобы они также были отправлены на сервер вместе с данными формы.