0

JSON ファイルを解析した後、奇妙な問題に直面しています。適切な場所で「トレース」を使用する場合にのみ、データにアクセスして使用できます。トレース行にコメントすると、「未定義」になります...コードの実行順序の問題ですか、それとも文字列引数の受け渡しの問題ですか?

解決策をお探しいただきありがとうございます。この問題は非常にイライラします!!

これが私のコードです:

//index.js

var language={};

var resourceManager = {};


$(document).ready(function(){
loading();
});



function loading() {

$.ajaxSetup({'beforeSend': function(xhr){
if (xhr.overrideMimeType)
    xhr.overrideMimeType("text/plain");
    }
});

$.getJSON("json/lang_french.json", function(data) {
      language = data;
});

setTitle();
}

function setTitle()
{

 var title = resourceManager.getString("welcome");
 var query = document.getElementById('title');
 query.textContent = title;
}

resourceManager.getString = function(str)
{

    //alert(str);//if I uncomment this line, the whole code works...
    return language[str];//when the "alert" is commented, return undefined !!!
};

JSON ファイルは次のとおりです: lang_french.json

{
"welcome" : "Bienvenue",
"goodbye" : "Au revoir"
}

および HTML ファイル index.html

<!DOCTYPE html>
<html>
<head>
 <style>img{ height: 100px; float: left; }</style>
 <script src="http://code.jquery.com/jquery-latest.js"></script>
 <script src="index.js"></script>
</head>
<body>
 <div id="title">
</div>
</body>
</html>
4

1 に答える 1

0

私は 100% ではありませんが、非同期の $.getJSON 呼び出しが "return language[str]" (AKA 競合状態) になるまでに完了していないことが原因だと思います。「アラート」を入れることで、通話を完了するのに十分な時間を与える必要があります。

$.getJSON のコールバックに「setTitle」を入れてみてください。

$.getJSON("json/lang_french.json", function(data) {
      language = data;
      setTitle();
});

つまり、空のオブジェクト {} になるのではなく、言語が実際に設定されるまでその呼び出しを待機します。

于 2012-05-10T09:41:34.730 に答える