将Spring模型属性传递给JS脚本

时间:2018-05-22 08:01:00

标签: javascript spring model thymeleaf

所以,我将数据解析为json,然后放入模型属性。像这样:

@RequestMapping("/{id}")
public String getNetworkDetails(Model model, @PathVariable String id) throws JsonProcessingException{

    model.addAttribute("poolHashrates", findAndDisplayDataService.getAllPools(Long.valueOf(id)));
    model.addAttribute("poolDataJson", findAndDisplayDataService.returnPoolsAsJson(Long.valueOf(id)));

    return "networkDetails :: modalContents";
}

接下来我试图通过以下方式将一个poolDataJson字符串分配给html片段中的JS变量:

<script>
    var data = eval('('+'${poolDataJson}'+')');
    console.log(data);
</script>

我想对数据做什么,将其作为我的饼图数据传递给外部JavaScript文件。但首先我在字符串赋值时遇到错误:

Uncaught SyntaxError: Unexpected token {

我错过了什么?

修改

我还尝试通过以下方式将json字符串分配给隐藏输入:

<input type="hidden" id="networkId" th:value="${poolDataJson}"/></td>

然后阅读:

var data = document.getElementById('networkId').innerHTML;
console.log(data);

但同样,在控制台中没有任何内容。当我将${poolDataJson}放入

时,它会在页面上正确打印...

1 个答案:

答案 0 :(得分:1)

您不应该将String作为JSON文本返回。相反,你应该返回常规的Java对象,然后像这样评估它(thymeleaf会自动将对象转换为JSON):

<script th:inline="javascript">
var data = /*[[${poolDataJson}]]*/ {};
console.log(data);
</script>

至于你的错误。我不得不猜测你的方法findAndDisplayDataService.returnPoolsAsJson正在返回无效的JSON。没有一个真实的例子,很难说清楚。