Я пытаюсь создать корзину.
У меня есть функция добавления товаров в корзину:
jQuery('#shop-add-btn').click(function () {
modal.style.display = "block";
var Product = {
idProduct: jQuery(this).data('idproduct'),
name: jQuery(this).data('nameproduct'),
quantity: jQuery("#quantity").val(),
price: jQuery(this).data('price'),
poids: jQuery(this).data('poids')
};
addToShoppingCard(Product)
.done(function (data) {
if (data == 'true') {
getCountShippingCard().done(function (data) {
$('#cardCount').html(data);
});
alert('Produit ajouté');
} else {
alert(data);
}
});
});
Итак, эта функция вызывает другую функцию, addToShippingCard:
function addToShoppingCard(Product) {
return $.post(
'/app/plugin/shop/process/shipping.php',
{
ADDPRODUCTTOCARD: 'OK',
idProduct: Product.idProduct,
name: Product.name,
quantity: Product.quantity,
singlePrice: Product.price,
totalPoids: Product.quantity * Product.poids,
totalPrice: shop_financial(Product.quantity * Product.price)
});
}
Но когда я пытаюсь запустить его, я получаю это сообщение об ошибке из консоли:
base_shop.js:104 Uncaught TypeError: Cannot read properties of undefined (reading 'post')
at getCountShippingCard (base_shop.js:104:14)
at Object.<anonymous> (e-billet-enfant-journee:415:25)
at fire (jquery-1.12.4.js:3232:31)
at Object.fireWith [as resolveWith] (jquery-1.12.4.js:3362:7)
at done (jquery-1.12.4.js:9840:14)
at XMLHttpRequest.callback (jquery-1.12.4.js:10311:8)
getCountShippingCard @ base_shop.js:104
(anonyme) @ e-billet-enfant-journee:415
fire @ jquery-1.12.4.js:3232
fireWith @ jquery-1.12.4.js:3362
done @ jquery-1.12.4.js:9840
callback @ jquery-1.12.4.js:10311
XMLHttpRequest.send (asynchrone)
send @ jquery-1.12.4.js:10254
ajax @ jquery-1.12.4.js:9738
jQuery.<computed> @ jquery-1.12.4.js:9890
addToShoppingCard @ base_shop.js:89
(anonyme) @ e-billet-enfant-journee:412
dispatch @ jquery-1.12.4.js:5226
elemData.handle @ jquery-1.12.4.js:4878
Может ли кто-нибудь помочь мне и объяснить мне, в чем проблема? Почему навигатор не распознает функцию почты?
Спасибо за вашу помощь
да, две функции работают почти одинаково. Вот код для getCountShippingCard: function getCountShippingCard() { return jQuery.post( '/app/plugin/shop/process/shipping.php', { GETCOUNTSHIPPINGCARD: 'OK' }); }
Но я обнаружил, что когда я заменяю "$" на "jQuery", проблема решается!! почему это так?
Возможно: конфликт.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


«Невозможно прочитать свойства undefined (чтение «post»)» означает, что функция $.post не определена.
Возможно, библиотека jQuery неправильно загружена в ваш HTML-файл или загружается после файла base_shop.js, поэтому объект $ еще недоступен во время выполнения файла base_shop.js.
Попробуйте импортировать файл "base_shop.js" после jquery, например, так;
<script src = "https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src = "/path/to/base_shop.js"></script>
Кроме того, вы также можете попробовать это сделать;
<script src = "https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(function() {
// do stuff here
});
</script>
Это гарантирует, что код в файле base_shop.js будет выполнен только после того, как библиотека jQuery будет загружена и объект $ станет доступен.
JQuery, вероятно, находится в режиме совместимости, чтобы избежать конфликта с другими библиотеками javascript. Таким образом, он не загружается в DOM, когда вы используете знак $.
по умолчанию jQuery использует $ как ярлык для jQuery. Таким образом, если вы используете другую библиотеку JavaScript, использующую переменную $, вы можете столкнуться с конфликтами с jQuery. Чтобы избежать этих конфликтов, вам нужно перевести jQuery в режим отсутствия конфликтов сразу после его загрузки на страницу и до того, как вы попытаетесь использовать jQuery на своей странице.
У нас может быть JQuery следующим образом:
/* Normal jQuery */
$.post();
/* "Safe" jQuery */
jQuery.post();
В вашем случае вам нужно выбрать безопасный подход JQuery.
Если вы посмотрите на ошибку, проблема, похоже, связана с
getCountShippingCard, код которой не включен в ваш вопрос.