Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Помогите допилить скрипт Ajax обновления кол-ва товара на странице корзина?


Blackseabreathe

Recommended Posts

Opencart 3.0.3.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 из БД, но непонятно как оно оттуда достается

Надіслати
Поділитися на інших сайтах


24 минуты назад, Blast сказал:

data: 'quantity['+key+']=' + (typeof(quantity) != 'undefined' ? quantity : 1),

 

По вашему примеру сделал так:

data: 'quantity['+cart_id+']=' + (typeof(val) != 'undefined' ? val : 1),

 

заместо "key" сделал cart_id так как это одно и тоже, переменная cart_id передается из checkout/cart.php

ну и заместо (typeof(quantity) != 'undefined' ? quantity : 1), - (typeof(val) != 'undefined' ? val : 1), - то есть значение, которое ввел пользователь

 

Теперь все работает, информация в БД обновляется, но все же получаю ошибку SyntaxError: JSON Parse error: Unrecognized token '<' parsererror

То есть передается не json, наверное?

Как можно проверить что передается?

Надіслати
Поділитися на інших сайтах


Судя по ф-ии в checkout/cart.php

public function edit() {
        $this->load->language('checkout/cart');
        $json = array();
        // Update
        if (!empty($this->request->post['quantity'])) {
            foreach ($this->request->post['quantity'] as $key => $value) {
                $this->cart->update($key, $value);
            }
            $this->session->data['success'] = $this->language->get('text_remove');
            unset($this->session->data['shipping_method']);
            unset($this->session->data['shipping_methods']);
            unset($this->session->data['payment_method']);
            unset($this->session->data['payment_methods']);
            unset($this->session->data['reward']);
            $this->response->redirect($this->url->link('checkout/cart'));
        }
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

 

 

 $this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));

Возвращаться должен json

Надіслати
Поділитися на інших сайтах


20 часов назад, Blackseabreathe сказал:

По вашему примеру сделал так:


data: 'quantity['+cart_id+']=' + (typeof(val) != 'undefined' ? val : 1),

 

заместо "key" сделал cart_id так как это одно и тоже, переменная cart_id передается из checkout/cart.php

ну и заместо (typeof(quantity) != 'undefined' ? quantity : 1), - (typeof(val) != 'undefined' ? val : 1), - то есть значение, которое ввел пользователь

 

Теперь все работает, информация в БД обновляется, но все же получаю ошибку SyntaxError: JSON Parse error: Unrecognized token '<' parsererror

То есть передается не json, наверное?

Как можно проверить что передается?

 

ну да, cart_id надо. Не на тот скрипт глянул

 

Эта ошибка означает что где-то в скрипте php произошла ошибка и он текст этой ошибки вернул. Смотрите в инструментах разработчика в браузере на вкладке Сеть текст ответа, там же увидите полный текст ошибки

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.