UPD 1
Изменил код проверки, см. комментарии ниже.
UPD 2
Изменил код парсинга и проверки.
Возникла задача вывести товары на произвольной странице магазина и иметь возможность добавить их в корзину, при этом обновить компонент корзины без перезагрузки страницы.
Предлагались разные решения, лучшее, на мой взгляд, следующее.
Вешаем на кнопку добавления товара JS:
Собственно, все.
Этот код добавляет нужное количество товара quantity с идентификатором id в корзину стандартным механизмом каталога (при этом надо учитывать, что POST (GET)-запрос может происходить и по другому адресу, отличному от /catalog/ (см. настройки инфоблока каталога).
По завершении добавления нужно проверить результат на успех и вызвать событие OnBasketChange, чтобы обработчик этого события, который висит на корзине, в итоге "отрисовал" новые значения.
Пояснение по UPD 2:
заменяем одинарную кавычку на двойную, чтобы парсер JSON мог корректно распарсить в переменную:
собственно такой вызов нужен для того, чтобы при наличии в браузере возможности вызвать "нативный"
он вызывался, в противном случае будет подключен
от JQuery. "
Это самые быстрые способы обработки.
Изменил код проверки, см. комментарии ниже.
UPD 2
Изменил код парсинга и проверки.
Возникла задача вывести товары на произвольной странице магазина и иметь возможность добавить их в корзину, при этом обновить компонент корзины без перезагрузки страницы.
Предлагались разные решения, лучшее, на мой взгляд, следующее.
Вешаем на кнопку добавления товара JS:
oncl ick="$.post('/catalog/?action=ADD2BASKET&ajax_basket=Y&id=<?=$good["ID"];?>&quantity=1', function(data) { data = data.split('\'').join('\u0022'); var obj = JSON && JSON.parse(data) || $.parseJSON(data); if (obj.STATUS == 'OK'){ BX.onCustomEvent('OnBasketChange'); }});"> |
Этот код добавляет нужное количество товара quantity с идентификатором id в корзину стандартным механизмом каталога (при этом надо учитывать, что POST (GET)-запрос может происходить и по другому адресу, отличному от /catalog/ (см. настройки инфоблока каталога).
По завершении добавления нужно проверить результат на успех и вызвать событие OnBasketChange, чтобы обработчик этого события, который висит на корзине, в итоге "отрисовал" новые значения.
Пояснение по UPD 2:
data = data.split('\'').join('\u0022'); |
var obj = JSON && JSON.parse(data) || $.parseJSON(data); |
JSON.parse |
$.parseJSON |
Это самые быстрые способы обработки.