2012-05-10 21 views
0

JSONファイルの解析後に奇妙な問題に直面しています。私はデータにアクセスし、適切な場所で "トレース"を使用する場合にのみ使用することができます!私がトレースラインにコメントするとき、私は "undefined"を取得します...それは私のコードの実行順序の問題か、文字列引数を渡す問題かもしれませんか?JSON解析オブジェクトへのアクセス(トレースでは動作しますが、...なしでは動作しません)

解決策を探して先におねがいしますが、この問題は非常にイライラです!ここで

は私のコードです:lang_french.json

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

とHTMLファイル、

のindex.html:ここ

//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ファイルです

<!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

私は100%ではありませんが、おそらく起きていることは、非同期$ .getJSON呼び出しが "言語[str]を返す"(AKA競合状態)になるまでに完了していないということです。 「アラート」を入力すると、通話を完了するのに十分な時間を与えなければなりません。

$ .getJSONなどのためのコールバックで「のsetTitle」を入れてみてください:

それはむしろ空のオブジェクトであるより、言語が実際に設定されるまで、その呼び出しを行うのを待つことを意味します
$.getJSON("json/lang_french.json", function(data) { 
     language = data; 
     setTitle(); 
}); 

{}。

+0

ありがとうございました!それは確かに働いた! – Coralie

関連する問題