Возврат JavaScript работает не так, как ожидалось

У меня есть базовая функция 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?

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
32
2

Ответы 2

Ваша вторая функция в данный момент ничего не возвращает, вам нужно

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 в этом случае, поскольку данные уже получены в предыдущем связанном вызове. если хотите всех поймать, используйте .наконец-то

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