延迟主体的呈现,直到Javascript变量可用

延迟主体的呈现,直到Javascript变量可用,javascript,jquery,html,Javascript,Jquery,Html,我有一个标准的html页面,其中我使用Javascript和jQuery从一个API加载用户数据,该API返回JSON格式的数据。此用户数据的一部分使用语言标识符。然后我有各种语言文件,例如en.js、nl.js、sl.js,它们包含一个数组,其中键是标记,值是翻译后的文本字符串。例如 language = []; language["salutation"] = "Hello"; 我有本地化功能 GetLangStringWrite = function (token, defaultVal

我有一个标准的html页面,其中我使用Javascript和jQuery从一个API加载用户数据,该API返回JSON格式的数据。此用户数据的一部分使用语言标识符。然后我有各种语言文件,例如en.js、nl.js、sl.js,它们包含一个数组,其中键是标记,值是翻译后的文本字符串。例如

language = [];
language["salutation"] = "Hello";
我有本地化功能

GetLangStringWrite = function (token, defaultValue) {
    try {
        if (typeof language[token] == "undefined") {
            document.write(defaultValue);
        } else {
            document.write(language[token]);
        }
    } catch (e) {
        document.write(defaultValue);
    }
}
此函数在body标记内调用,例如

<div>
    <script>GetLangStringWrite('salutation', 'Hi');</script>
</div>

GetLangStringWrite(‘问候’、‘嗨’);
当我将语言文件(例如en.js)直接加载到html文件的头中时,一切正常

我正在使用以下方法加载语言文件:

<script>
var loadLanguageTimer;

function LoadLanguage() {
    if ((typeof ENV !== "undefined") && (typeof ENV.ud.language !== "undefined")) {
        var s = document.createElement("script");
        s.type = "text/javascript";
        s.src = "javascript/" + ENV.ud.language + ".js";
        $("head").append(s);
        clearTimeout(loadLanguageTimer);
        return;
    }
    loadLanguageTimer = setTimeout(LoadLanguage, 250);
}

LoadLanguage();
</script>

变量加载语言定时器;
函数LoadLanguage(){
if((typeof ENV!=“未定义”)&&(typeof ENV.ud.language!=“未定义”)){
var s=document.createElement(“脚本”);
s、 type=“text/javascript”;
s、 src=“javascript/”+ENV.ud.language+“.js”;
$(“标题”)。追加;
clearTimeout(loadLanguageTimer);
返回;
}
loadLanguageTimer=setTimeout(LoadLanguage,250);
}
LoadLanguage();
当我创建一个机制来检查JSON文件中的语言参数是否可用,然后加载en.js、nl.js、etv。事情变得“一团糟”

加载机制工作正常,但html主体和GetLangStringWrite('sallation','Hi');在加载语言文件之前,已执行/呈现代码。因此,API需要时间来获取数据

是否有人知道如何解决这个问题,例如延迟主体的呈现,直到JSON api可用,或者甚至更好。更好的方法可能是不包括,而是使用id并使用jQuery设置值,不幸的是,时间不允许在12小时内为我的演示修复它


如果您需要更多信息,请告诉我。

不要使用
文档。编写
:它是同步的,只要您想做一些异步的事情,您就会立即看到它的缺点。这里有一个更好的解决方案

不要使用调用函数的内联脚本标记来使用
document.write
,而是使用数据属性创建div,这些数据属性将在以后填充

<div data-localization-token="salutation">Hi</div>

您可能需要执行一些额外的加载来填充基于JSON的
语言,但从您的问题来看,您似乎已经自己处理过了。

不要使用
文档。编写
:它是同步的,只要您想做一些异步的事情,您就会立即看到它的缺点。这里有一个更好的解决方案

不要使用调用函数的内联脚本标记来使用
document.write
,而是使用数据属性创建div,这些数据属性将在以后填充

<div data-localization-token="salutation">Hi</div>

您可能需要执行一些额外的加载来填充基于JSON的
语言,但从您的问题来看,您似乎已经自己处理过了。

不要使用
文档。编写
:它是同步的,只要您想做一些异步的事情,您就会立即看到它的缺点。这里有一个更好的解决方案

不要使用调用函数的内联脚本标记来使用
document.write
,而是使用数据属性创建div,这些数据属性将在以后填充

<div data-localization-token="salutation">Hi</div>

您可能需要执行一些额外的加载来填充基于JSON的
语言,但从您的问题来看,您似乎已经自己处理过了。

不要使用
文档。编写
:它是同步的,只要您想做一些异步的事情,您就会立即看到它的缺点。这里有一个更好的解决方案

不要使用调用函数的内联脚本标记来使用
document.write
,而是使用数据属性创建div,这些数据属性将在以后填充

<div data-localization-token="salutation">Hi</div>


您可能需要进行一些额外的加载,以基于JSON填充
语言
,但从您的问题来看,您似乎已经自己处理过了。

这是不使用
文档的另一个原因。编写
。如果您使用的是
document.write
,则不能延迟输出。您肯定需要对其进行轻微的重组,以使其在远程实现。您将使用@JakeKing什么方法?如何加载JavaScript中的语言文件?您能提供一个代码示例吗?@SeanDunwoody,我已经添加了您要求的代码段。谢谢:)我会帮您查看的。这是不使用
文档的另一个原因。请编写
。如果您使用的是
document.write
,则不能延迟输出。您肯定需要对其进行轻微的重组,以使其在远程实现。您将使用@JakeKing什么方法?如何加载JavaScript中的语言文件?您能提供一个代码示例吗?@SeanDunwoody,我已经添加了您要求的代码段。谢谢:)我会帮您查看的。这是不使用
文档的另一个原因。请编写
。如果您使用的是
document.write
,则不能延迟输出。您肯定需要对其进行轻微的重组,以使其在远程实现。您将使用@JakeKing什么方法?如何加载JavaScript中的语言文件?您能提供一个代码示例吗?@SeanDunwoody,我已经添加了您要求的代码段。谢谢:)我会帮您查看的。这是不使用
文档的另一个原因。请编写
。如果您使用的是
document.write
,则不能延迟输出。您肯定需要对其进行轻微的重组,以使其在远程实现。您将使用@JakeKing什么方法?如何加载JavaScript中的语言文件?你能提供一个代码示例吗?@SeanDunwoody,我已经添加了你要求的代码段。谢谢:)我会帮你看一看。你认为我可以使用GetLangStringWrite函数来制作