Добрый вечер! Поделитесь, пожалуйста, как можно изменить текст кнопки после выполнения ajax-запроса? У меня есть кнопка, и код для нее выглядит следующим образом:
<pre><code class="html"><button type="button" id="button-cart" class="btn btn-primary btn-lg btn-block"><img src="/catalog/view/theme/default/image/icons/cart.svg" width="30" height="27" alt="button_cart">В КОРЗИНУ</button></code></pre>
Также у меня есть элемент, в который я хочу добавить текст:
<pre><code class="html"><div id="total_carts" style="display: inline-block;">В КОРЗИНУ</div></code></pre>
В ajax-запросе я использую следующий код:
<pre><code class="java">if (json['success']) {
$('#total_carts').html('В КОРЗИНЕ ' + json['total_cart'] + ' шт.');
}</code></pre>
Но текст не обновляется. Спасибо!
Добрый вечер!
Чтобы изменить текст на кнопке после выполнения AJAX-запроса, вам нужно обратиться к элементу кнопки по его идентификатору (ID) и обновить его текст с помощью метода jQuery `.html()` или `.text()`. В вашем случае, вы можете сделать это следующим образом:
1. Убедитесь, что вы правильно получаете `json['success']` и `json['total_cart']` в результате AJAX-запроса.
2. После обновления текста в элементе `<div id="total_carts">`, добавьте код для изменения текста на кнопке.
Вот пример кода, который производит необходимые изменения:
```javascript
$.ajax({
url: 'ваш_адрес_сервера', // Замените на ваш URL
type: 'POST',
data: { /* ваши данные */ },
dataType: 'json',
success: function(json) {
if (json['success']) {
$('#total_carts').html('В КОРЗИНЕ ' + json['total_cart'] + ' шт.');
$('#button-cart').html('<img src="/catalog/view/theme/default/image/icons/cart.svg" width="30" height="27" alt="button_cart">В КОРЗИНЕ ' + json['total_cart'] + ' шт.'); // Измените текст на кнопке
}
},
error: function() {
alert('Произошла ошибка. Попробуйте снова.');
}
});
```
### Объяснение:
- `$('#total_carts').html('В КОРЗИНЕ ' + json['total_cart'] + ' шт.');`: обновляет текст в `div` с идентификатором `total_carts`.
- `$('#button-cart').html('<img src="/catalog/view/theme/default/image/icons/cart.svg" width="30" height="27" alt="button_cart">В КОРЗИНЕ ' + json['total_cart'] + ' шт.');`: обновляет текст на кнопке, добавляя к нему количество товаров в корзине.
Если вы хотите, чтобы текст на кнопке был просто изменён, без картинки, можно использовать метод `.text()` вместо `.html()`, если это уместно.
Это должно работать, если всё остальное настроено правильно и AJAX-запрос выполняется успешно. Убедитесь, что ваши пути и данные отправляются верно.
во-первых выведите, что вам приходит в ответе от сервера: console.debug(json);
уточню, что метод .debug есть только в FireFox, для Chrome нужно использовать .log.
во-вторых, JSON это может быть объект, а значит нужно проверять json.success.
в-третьих, у вас в кнопке один HTML ID, а в обработчике ответа -- другой.
т.е. вы слушаете событие на одном элементе, а меняете в другом.
если иное вам не нужно, уточните вопрос.
вам коде слушателя сделать примерно следующее для работы с одной (нажатой) кнопкой:
$('button#button-cart').on( 'click', (event) => { event.preventDefault(); let button = event.currentTarget; $.ajax( { //параметры запроса success: (response) => { if(response.success) { button.html('текст кнопки'); } } } ); } );
но это уберёт картинку.
вам в идеале придётся получить значение содержимого тега кнопки и _заменить_ нужный текст.
вообще это будет работать криво, т.к. вы опираетесь на HTML ID, а по вашей вёрстке не видно, что этот HTML ID уникален для документа.
если вам нужно менять в другом элементе текст -- то в коде слушателя работайте уже с ним.