我试图加载一个结构就像的外部js(json)文件(PhoneGap app)
var localString ={
"tag1": "Username",
"tag2": "Password",
"submit": "Submit"
}
并使用以下代码在运行时加载它,newlocale变量保存要加载的文件的名称,例如:如果locale是english-USA,那么var resourcePath = en-US.js。问题是我第一次运行此代码我得到此错误“ReferenceError:localstring未定义”,但它第二次加载时加载外部字符串。在我之间使用html5中的“select”标签调用外部文件。有人可以提供一些关于我出错的地方的见解或任何指针来解决这个问题。
var newlocale = window.DeviceCulture.get();
local(newlocale);
function local(lang) {
try {
var resourcePath = lang + '.js';
var scriptEl = document.createElement('script');
scriptEl.type = 'text/javascript';
scriptEl.src = resourcePath;
alert(resourcePath);
document.getElementsByTagName("head")[0].appendChild(scriptEl);
//$('head').append(scriptEl);
//var localString = window.localString;
document.getElementById("07").value = localString['submit'];
} catch (e) {
errorEvent(e);
}
}
答案 0 :(得分:0)
好的,我相信你的问题的根本原因是你在页面加载后将.js文件的标签附加到头部。首次加载页面时,脚本文件将按顺序下载和解释,因此b可能依赖于a。但是,您执行此操作的方式是非阻塞的,因此当您到达代码中尝试访问“localString”的下一行时,您加载的脚本未完全加载。
要解决这个问题,我会稍微调整一下你的代码。首先忘记制作本地文件JavaScript。只需将它们设为纯文本.json文件即可。例如:
{
"tag1": "Username",
"tag2": "Password",
"submit": "Submit"
}
然后我使用XHR加载该文件而不是脚本标记插入。类似的东西:
var newlocale = window.DeviceCulture.get();
var localString;
local(newlocale);
function local(lang) {
try {
var resourcePath = lang + '.json';
var request = new XMLHttpRequest();
request.open("GET", resourcePath, true);
request.onreadystatechange = function(){
if (request.readyState == 4) {
if (request.status == 200 || request.status == 0) {
localString = JSON.parse(request.responseText);
// at this point localString is loaded with the new language
document.getElementById("07").value = localString['submit'];
}
}
}
request.send();
} catch (e) {
errorEvent(e);
}
}
这应该照顾好事情。