解析JSON文件后,我遇到了一个奇怪的问题。我访问数据,只有在正确的位置使用“trace”才能使用它!当我评论跟踪线时,我得到“未定义”......这是我的代码执行顺序的问题,还是传递字符串参数的问题?
提前感谢您寻找解决方案,这个问题非常令人沮丧!!
这是我的代码:
// 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>
答案 0 :(得分:0)
我不是100%,但我猜测发生的事情是异步的$ .getJSON调用在到达“return language [str]”时已经没有完成(AKA是一个竞争条件) 。将“警报”置于必须给它足够的时间来完成通话。
尝试将“setTitle”放在$ .getJSON的回调中,例如:
$.getJSON("json/lang_french.json", function(data) {
language = data;
setTitle();
});
这意味着在实际设置语言之前它会等待进行调用,而不是空对象{}。