JavaScript返回的行为不符合预期

时间:2018-03-29 20:24:33

标签: javascript return return-value

我有一个基本的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只是回复{ {1}} - 我查看了undefined中的返回手册,并阅读了有关SO的大量帖子 - JS应该能够返回一个字面量,不是吗?用这个简单的脚本我没看到什么?如何将检索到的变量returndata转换为getItemDescription

2 个答案:

答案 0 :(得分:0)

你的第二个功能目前不会返回任何内容,你需要的是

function getItemDescription(id){
        return $.post("item_description.php", {id:id}, 
function () {
            // ...
        })
            .done(function (data) {
                    return data;
            })
            .fail(function () {
                return 'error';
            });
    }

答案 1 :(得分:0)

你应该做的是在 .done 里面打电话。一个例子是:

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,因为数据已经在之前的链式调用中被检索到了。如果你想抓住所有,请使用 .finally