-4

这个问题已经回答投票了。我的编辑与使其更清晰和分享一些为其他开发人员获得的新知识有关,我不期待新的答案

我正在使用 jQuery 读取 XML,但是当我尝试显示警报时,它可以正常工作;但是,当我尝试返回该值时,它总是会给我一条消息,表明它是未定义的。

function getText(value){

    var val;
    var lang;
    var location;
    lang=getLanguage();

    if (lang=='en')
        lang='';
    else
        lang+='.';

    location="resources/AppResources."+lang+'xml';

    $.get(location, function (xml) {
        $(xml).find("data").each(function () {
        
            var name=$(this).attr('name');

            if (name===value)
                return $(this).find('value').text();
        });
    });
    
}

这是调用它的代码:

$(document).ready(function() {  
    alert(getText('AppTitle'));
});

如果我在 return 语句中添加一个警报,它会显示我选择的值。

小更新:

正如 Arun P Johny 在他的回答中解释的那样,我的代码中缺少的部分是Mozilla 以这种方式定义的回调:

回调函数是作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或操作。

4

1 回答 1

1

您不能从异步方法返回值,最简单的解决方案是使用这样的回调函数:

function getText(value, callback) {
    var val;
    var lang;
    var location;
    lang = getLanguage();

    if (lang == 'en') 
        lang = '';
    else 
        lang += '.';

    location = "resources/AppResources." + lang + 'xml';

    $.get(location, function (xml) {
        $(xml).find('data[name="' + value + '"]').each(function () {
            callback($(this).find('value').text());
        });
    });

}

$(document).ready(function() {
    getText('AppTitle', function(value){
        alert(value);
    })
});
于 2013-10-17T07:17:18.907 回答