У меня есть базовая функция jQuery:
$(document).on('click', '#myElement', function(){
alert( getItemDescription('2') );
});
Моя функция вызывается и выполняет следующее, как ожидалось:
function getItemDescription(id){
$.post("item_description.php", {id:id},
function () {
// ...
})
.done(function (data) {
return data;
})
.fail(function () {
return 'error';
});
}
Когда я смотрю на вкладку сети в окне консоли, .post() успешно извлекает правильную информацию из item_description.php - Однако моя первоначальная функция - alert просто отвечает undefined - Я просмотрел руководство по возврату в JS и прочитал множество сообщений. на SO - Предполагается, что return может возвращать буквальное значение, не так ли? Что я не вижу в этом простом сценарии? Как мне перенести полученную переменную data из getItemDescription в alert?



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


Ваша вторая функция в данный момент ничего не возвращает, вам нужно
function getItemDescription(id){
return $.post("item_description.php", {id:id},
function () {
// ...
})
.done(function (data) {
return data;
})
.fail(function () {
return 'error';
});
}
Что вам нужно сделать, это вызвать внутри .Выполнено. Один из примеров:
function getItemDescription(id,f){
$.post("item_description.php", {id:id},
function (data) {
// ...
})
.done(function (data) {
f(data);
})
.fail(function () {
return 'error';
});
}
$(document).on('click', '#myElement', function(){
getItemDescription('2',alert);
});
также не следует использовать .done в этом случае, поскольку данные уже получены в предыдущем связанном вызове. если хотите всех поймать, используйте .наконец-то