На данный вопрос уже ответили:
Выношу 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-запрос в виде внешней функции.
Запрос выполняется синхронно, что есть плохая практика и, в данном случае, совершенно бесполезно. 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);
});
Сборка персонального компьютера от Artline: умный выбор для современных пользователей