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 调用在它到达“返回语言 [str]”(又名竞争条件)时尚未完成。发出“警报”必须给它足够的时间来完成呼叫。

尝试将“setTitle”放入 $.getJSON 的回调中,例如:

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

这意味着它将等待调用,直到实际设置语言,而不是成为空对象 {}。

于 2012-05-10T09:41:34.730 回答