-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 に答える