0

Выношу ajax-запрос в отдельную функцию с целью повторного использования:

function getProducts(a,b) {                          
  $.ajax({
   type: "POST",
   url: url,
   data: {cat: a, subcat: b},                   
     success: function(data) {
       return data;
     },       
     async: false                                                                                 
  });
}

var list = getProducts(10,20);
console.log(list); // undefined

Вызов функции выдает undefined, хотя data внутри функции определено. Насколько я понимаю, проблема в ассинхронности, хотя явно указано async: false.

Прошу подсказать, как правильно использовать ajax-запрос в виде внешней функции.

118_64
  • 693
  • 1
  • 7
  • 27
  • спасибо. То, что вы указали, является для меня ответом. Но в том и проблема, что не удается реализовать примеры по ссылке в виде рабочего кода. Не работает, - undefined. Что-то делаю неправильно. – 118_64 Jan 09 '19 at 15:00

1 Answers1

2

Запрос выполняется синхронно, что есть плохая практика и, в данном случае, совершенно бесполезно. undefined, в вашем случае, возвращает не jquery ajax запрос, а функция, которая отрабатывает не дожидаясь пока с сервера что-то придет.

В качестве решения можно передавать в функцию getProducts, доп. аргументом, обработчик, который будет вызываться при ответе с сервера и вершить действия с полученными данными.

let getProducts = (a,b, handler) => {
  $.ajax({
    type: "POST",
    url: url,
    data: {cat: a, subcat: b},
    success: function(data) {
      handler(data);
    }
  });
}

let list; getProducts(10,20, (data) => { list = data; console.log(list); });