Обновление части на странице без перезагрузки, после изенения

Цена договорная
06 марта 2022, 18:18 • 6 откликов • 47 просмотров
Вопрос довольно простой, но у меня не хватает знаний.

На странице у меня проверка, если значение в поле в таблице 0, то
выводим кнопку, если 1, то скрываем, так вот после того как я нажал на
кнопку вернуть деньги, у меня идет запись в таблицу в бд, вместо 0, я
записываю 1, и я пытаюсь обновить данную проверку, чтобы скрыть кнопку,
ибо значение уже перезаписалось в таблице, следовательно надо как-то
обновить но не всю страницу, а только проверку, ниже изложил чтобы
понятно было.

Тут код лучше видно, добавил туда задание.
https://ru.stackoverflow.com/questions/1387969/%d0...

<?php if (empty($order->refunded)) : ?>
<form id="backM" action="/admin/backM/<?= $id ?>" method="post">
<input type="hidden" name="backM" value="1">

<button type="submit">Вернуть деньги</button>

<div class="message-backM"></div>
</form>
<?php endif; ?>

**Валидация и т.д**

jQuery(document).ready(function($) {
$(document).on('submit', '#backM', function(event) {
$('#backM .message-backM').html('');
let form = this;
event.preventDefault();
let formLoad = new FormData($(form)[0]);
formLoad.append('ajax', 1);
$.ajax({
url: $(this).attr('action'),
type: 'POST',
dataType: 'json',
data: formLoad,
beforeSend: function() {
App.showLoader();
},
complete: function() {
App.hideLoader();
},
success: function(d) {
if (d.status == 'success') {

//пытаюсь обновить проверку if, чтобы скрыть кнопку
**$('#refunded').text(d.data.refunded);**

App.hideLoader();
App.bootstrap.addAlert('#backM .message-backM', 'success', d.message);
}
if (d.status == 'error') {
App.bootstrap.addAlert('#backM .message-backM', 'error', d.message);
}
App.hideLoader();
},
error: function() {
App.hideLoader();
App.bootstrap.addAlert('#backM .message-backM', 'error', e.message);
},
cache: false,
contentType: false,
processData: false
});
});
});

**Контроллер**

public function action_backM()
{
$_isAjax = Arr::get($_POST, 'ajax', 1);
$id = (int)$this->request->param('id');
$orders = ORM::factory('Order', $id);

if (!empty($_isAjax)) {
$data = Arr::extract(
$_POST,
array(
'backM'
)
);

$orders->values($data);

try {

$orders->set('refunded', $data['backM']);
$orders->save();

/* отправляю новые данные после изменения */
$_data = array(
'refunded' => $orders->refunded,
);

die(json_encode([
'status' => 'success',
'data' => $_data,
'message' => 'Вы успешно сделали возврат денег.'
], JSON_UNESCAPED_UNICODE));
} catch (Exception $e) {
die(json_encode([
'status' => 'error',
'title' => 'Произошла ошибка, попробуйте повторить действия позже.',
'message' => $e->getMessage()
], JSON_UNESCAPED_UNICODE));
}
}
}

Вообщем в контролере я собираю новые данные после изменения и отправляю ajax

$_data = array(
'refunded' => $orders->refunded,
);

Далее в js, я их получаю и вывожу

$('#refunded').text(d.data.refunded);

Работает выводит цифру 1, все верно.

**Но мне не совсем это надо, мне не выводить надо цифру, а как-то в проверку подставлять (проверка ниже if (empty($order->refunded)), что уже не 0, а 1, как сделать?**

<?php if (empty($order->refunded)) : ?>
тут кнопка
<?php endif; ?>
Отзывы
Спасибо, помог решить проблему, рекомендую.
~ 2 года назад
R50 806fbe6d16afba317536ec394baeccdf
Фрилансер
Адекватный человек, легко нашли общий язык.
Сам занимается разработкой, поэтому грамотно ставит задачу, оперативно и адекватно оценивает предлагаемые варианты решения.
Всё прошло гладко, я остался доволен сотрудничеством.
~ 2 года назад