我对JavaScript比较陌生。我想做的一件事就是能够拥有某些环境变量,特别是主机名。在开发中,它将是localhost。在生产中,它将完全不同。

我已经看过如何使用JSON文件来加载值,例如:

value.json

{
    "myVal": "production"
}


jQuery $ .getJSON()(IIFE函数的一部分,该函数创建具有不可变字段的对象)

$.getJSON("value.json", function(data){
    myVal = data.myVal; //Not globally assigned, assigned to field in enclosing function
    console.log(data.myVal);
});


问题是getJSON()是异步的。尽管加载该数据的时间很短,但它确实创建了一种方案,即用户可能在完成加载主机名值之前单击页面上的链接。

我只是想知道解决这个问题的最佳方法是什么?如何确保此值始终可用?

到目前为止,我有一个想法是使用会话令牌,因为它已经是请求/响应机制的一部分,并且将始终可用。由于它将是一个已签名的令牌,因此其值将是安全的,因此某人将无法恶意更改这些值。

但这听起来像是个骇客的解决方案。因此,我想知道是否有人知道更好,更优雅的方法?

谢谢。

最佳答案

我经常使用的一种方法是从后端导入变量。
例如,如果您使用PHP,则可以echo删除变量。
您可以将以下<script>放在<head>中,并且CONFIG随处可见。

<script>
var CONFIG = {
  host: "<?php echo $host; ?>",
  otherConfig: "<?php echo $otherConfig; ?>"
};
</script>

10-05 19:33