Как правильно отправить Ajax запрос на обновление количества товара на странице корзина opencart 3?

Пытаюсь сделать обновление кол-ва товара на странице корзина через Ajax. В интернете куча информации по теме, но каждая из них оказалась не результативная.

У каждого товара в корзине есть поле quantity У меня оно выглядит так

<input type="text" name="quantity[{{ product.cart_id }}]" value="{{ product.quantity }}" size="1" min="1" class="tac ch_quantity" oninput="updateCart('{{ product.quantity }}', '{{ product.cart_id }}', $(this).val());" />

Все из коробки, за исключением size="1" и oninput="updateCart('{{ product.quantity }}', '{{ product.cart_id }}', $(this).val());"

То есть при изменении поля кол-ва я передаю в ф-ию updateCart кол-во, cart_id и введенное значение юзером

Далее скрипт

function updateCart(quantity, cart_id, val) {
setTimeout(function(){ // ждем 100 миллисекунд
//alert('quantity = '+ quantity +', cart_id = ' + cart_id + ', val = ' + val);
if (quantity != 0 && quantity != 'undefined') { // если кол-во не равно 0, то делаем ajax запрос
$.ajax({
url: 'index.php?route=checkout/cart/edit', // на этот урл
type: 'post', //пост
//data: 'cart_id['+cart_id+']='+val, //пробовал сначала этот вариант data
data: 'key=' + cart_id + '&quantity=' + (typeof(val) != 'undefined' ? val : 1), // потом этот как из коробки в common.js
dataType: 'json', //json
success: function(json) {
 //да, тут кастомизированная корзина, тоесть все тоже самое что из коробки только заместо ul, li, table сделал div-"ы" (суть не меняется от этого)
$('#cart .ch_allProductsWrapper').load('index.php?route=common/cart/info .ch_allProductsWrapper .ch_products'); // обновляем корзину в шапке
if($('#checkout-cart').length>0){
$('#checkout-cart .ch_allProductsWrapper').load('index.php?route=common/cart/info .ch_allProductsWrapper .ch_products'); // обновляем на странице корзина
}
},
error: function(xhr, ajaxOptions, thrownError) {
$.jGrowl(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
}
}, 100);
}

Что в итоге получается?

Допустим изначально (до изменения кол-ва) все товары имеют кол-во со значением "1", далее я изменяю, например, на "12" и происходит следующее.

Корзины в шапке и в теле страницы обновляются, но значения кол-ва товара снова меняется на "1", не пойму в чем дело, то есть что в Ajax запросе не так, наверное в параметре "data" что-то не так написал, уже убил времени много на это дело. Поэтому решил попросить помощи здесь.

Из коробки в common.js кусок кода обновления корзины

'update': function(key, quantity) {
$.ajax({
url: 'index.php?route=checkout/cart/edit',
type: 'post',
data: 'key=' + key + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
dataType: 'json',
success: function(json) {
// Need to set timeout otherwise it wont update the total
setTimeout(function () {
$('header .headerTotal').html('<span id="cart-total">' + json['total'] + '</span>');
}, 100);

if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') {
location = 'index.php?route=checkout/cart';
} else {
$('#cart .ch_allProductsWrapper').load('index.php?route=common/cart/info .ch_allProductsWrapper .ch_products');
if($('#checkout-cart').length>0){
$('#checkout-cart .ch_allProductsWrapper').load('index.php?route=common/cart/info .ch_allProductsWrapper .ch_products');
}
}
},
error: function(xhr, ajaxOptions, thrownError) {
$.jGrowl(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
},

Как я понял, key значит значение cart_id из БД, но непонятно как оно оттуда достается


Ответы (1 шт):

Автор решения: Alexey B

Не совсем ясно, откуда у вас взялись такие проблемы, так как в Opencart'е из коробки есть кнопка изменения кол-ва товаров, которая нормально работает, по ajax-запросу. Кнопка ? справа от текстового поля изменяет кол-во товаров Кнопка ? справа от текстового поля изменяет кол-во товаров

→ Ссылка