我正在尝试在 javascript 中使用 Spring 变量:
Map<String, List<String>> states;
然后我找到了一些信息here
所以我尝试了:
<script th:inline="javascript">
/*<![CDATA[*/
var xxx = ${states};
console.log(xxx);
/*]]>*/
</script>
在我的浏览器的源选项卡中,我有类似的内容:
var xxx = {STATE1=[a, b, c, d]};
console.log(xxx);
错误是:Uncaught SyntaxError: Invalid shorthand property initializer
。
我也尝试过:var xxx =/*[[${states}]]*/'foo';
如果我打印 console.log(xxx)
,我得到了 'foo'
。
最佳答案
此错误是由于 {STATE1=[a, b, c, d]}
是无效的 Javascript 对象。
解释非常简单:您看到的是服务器端渲染的产品(您正在使用 Thymeleaf,就像我通过 th:inline
标签建议的那样)。因此,在服务器上,您的 map 对象将呈现为 {STATE1=[a, b, c, d]}
字符串。在您的客户端(浏览器)上,您将获得包含此字符串的页面,仅此而已。已经没有任何 Java 对象。只是字符串。并且这个字符串是Javascript中对象的无效初始化。
所以你根本不能以这种方式使用 map 。您不能使用 JSON.parse
解析它,因为它是无效的 JSON(应该使用 :
而不是 =
)。
希望这对您有所帮助!
附言如果您尝试在 Javascript 中将 =
替换为 :
,它将以不同于您预期的方式工作:数组 [a, b, c, d]
将被视为名称为 a
、b
、c
和 d
的变量数组,因此您将不得不在 ''
中丢失它。但我建议放弃这个想法并重新考虑你的方法。这不是它应该使用的方式。
关于javascript - 在 javascript 中使用 Spring 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45933850/