@GrimJack

Как записать результат выполнения аякса в переменную и продолжить выполнение функции?

Есть функция (getProductData(productId)) которая получает аякс запросом объект из бд и возвращает его. Далее есть разные функции которые могут вызывать эту функцию.
Проблема в том, что код не дожидается ответа от getProductData(productId) и выполняет действия далее (от чего вылетает ошибка). Как заставить дожидаться ответа и после выполнять код?
async: false не помог.
Код для наглядности:
/*
    *Получить инфо о продукте по его id
     */
    function getProductData(productId) {
        $.ajax({
            async: false,
            method: "POST",
            url: "/get-product-data",
            data: { productId: productId }
        })
            .success(function( msg ) {
                return msg;
            })
            .error(function () {
                alerts({status: "ERROR", msg: 'Ошибка получения данных, попробуйте позже'});
            });
    }

    /*
    *Добавление в корзину и увеличение, если есть
     */
    function addToCart(productId) {
        var product = getProductData(productId);
        if($(product).prop('slug') in cart){
            cart[$(product).prop('slug')].amount = ++cart[$(product).prop('slug')].amount;
            Cookies.set('cart', cart, { expires: 10 });
            reloadCart(cart);
            alerts({status: 'OK', msg: 'Теперь ' + $(product).prop('name') + ' стало ' + cart[$(product).prop('slug')].amount});
        }
        else {
            cart[$(product).prop('slug')] = {
                productId: $(product).prop('id'),
                img: $(product).prop('img'),
                price:$(product).prop('price'),
                name: $(product).prop('name'),
                amount: 1
            };
            Cookies.set('cart', cart, { expires: 10 });
            reloadCart();
            alerts({status: 'OK', msg: 'Вы добавили: ' + $(product).prop('name')});
        }
    }
  • Вопрос задан
  • 187 просмотров
Решения вопроса 2
potapchino
@potapchino
function getProductData(productId, callback) {
  $.ajax({...})
    .success(function( msg ) {
      callback(msg);
    })
    .error(function () {...});
}

function addToCart(productId) {
  getProductData(productId, function(product) {
    if($(product).prop('slug') in cart){...}
    else {...}
  });
}
Ответ написан
UmbrellaCoders
@UmbrellaCoders
PHP, JS Developer
Используйте callback функции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы