JQuery.post() не найден

Я пытаюсь создать корзину.

У меня есть функция добавления товаров в корзину:

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, код которой не включен в ваш вопрос.

Andy 27.12.2022 11:34

да, две функции работают почти одинаково. Вот код для getCountShippingCard: function getCountShippingCard() { return jQuery.post( '/app/plugin/shop/process/shipping.php', { GETCOUNTSHIPPINGCARD: 'OK' }); }

carpeDiem 27.12.2022 11:36

Но я обнаружил, что когда я заменяю "$" на "jQuery", проблема решается!! почему это так?

carpeDiem 27.12.2022 11:38

Возможно: конфликт.

Andy 27.12.2022 11:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

«Невозможно прочитать свойства 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.

Другие вопросы по теме