访问JSON解析对象(使用跟踪但不是没有...)

时间:2012-05-10 09:33:07

标签: javascript json data-access

解析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>

1 个答案:

答案 0 :(得分:0)

我不是100%,但我猜测发生的事情是异步的$ .getJSON调用在到达“return language [str]”时已经没有完成(AKA是一个竞争条件) 。将“警报”置于必须给它足够的时间来完成通话。

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

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

这意味着在实际设置语言之前它会等待进行调用,而不是空对象{}。