2011-02-23 114 views
2

我想加載一個JSON文件並閱讀下列數據閱讀JSON與jQuery

{ 
    "extTitle": { 
     "message": "test1" 
    }, 
    "extName":{ 
     "message": "test2" 
    } 
} 

這是我的加載數據

function loadLocales(){ 
    var userLang = (navigator.language) ? 
        navigator.language : navigator.userLanguage; 

    switch(userLang){ 
     default: 
      $.getJSON("_locales/ne/messages.json", function(data){ 
       return data; 
      }); 
     break; 
    } 
} 

當我嘗試用下面的函數我讀得到一個

i18n undefined error 

function getValue(key){ 
    var i18n = loadLocales(); 
    return i18n[key].message; 
} 

任何想法?

回答

3

這是因爲Ajax是異步的。從成功回調中返回某些內容是不可能的。 (有一個「同步」選項,但這對於一系列字典查找來說是不可能的)。

您需要重新構建程序的流程,以便操作(無論它是什麼 - 填充標籤或例如具有值的其他元素)發生在Ajax調用的成功回調中。

$.getJSON("_locales/ne/messages.json", function(data){ 

      // For example, populate an element with an item from the JSON 
      $("#element").html(data.message); 
     }); 
+0

hm我想開發某種本地化功能來支持不同的語言,你認爲我建議這樣做的方式嗎? – 2011-02-23 15:48:07

+0

@藝術這是一個大問題。見例如http://stackoverflow.com/questions/48726/best-javascript-i18n-techniques-ajax-dates-times-numbers-currency或http://stackoverflow.com/questions/3084675/internationalization-in-javascript ... 。我通常傾向於預先加載我要在文檔頭部使用的所有單詞。我希望使用Ajax加載翻譯可能通常太慢 – 2011-02-23 15:50:53