Sre*_*ova 6 javascript json go go-templates
目前我遇到了与将 Golang 变量分配给 Javascript 变量相关的问题。我使用的是 Golang 模板,所以,从后端我发送了一个 JSON 变量,就像这样:
var c []models.C
b, _ := json.Marshal(c)
err = tpl.ExecuteTemplate(w, "index.gohtml",string(b))
Run Code Online (Sandbox Code Playgroud)
如您所见,我有一个切片,将其转换为 Json,然后将该 Json 转换为字符串,然后将其发送到模板。然后,在前端,我需要将它分配给一个变量,它应该是有效的 JSON,我有这个:
var rowData = {{.}};
Run Code Online (Sandbox Code Playgroud)
但是,我得到 SyntaxError: expected property name, got '{'
所以,我的问题是:我应该如何分配那个 JSON?
首先,您必须使用html/template代替text/template,因为前者提供上下文敏感的转义。
其次,在模板中,上下文必须清楚它是 JavaScript 代码,例如它必须在 HTML<script>标签内。
请参阅此工作示例:
type Point struct {
Name string
X, Y int
}
func main() {
t := template.Must(template.New("").Parse(src))
p := Point{"Center", 100, 200}
pj, err := json.Marshal(p)
if err != nil {
panic(err)
}
if err = t.Execute(os.Stdout, string(pj)); err != nil {
panic(err)
}
}
const src = `<script>
var point = {{.}};
alert(point);
</script>`
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
<script>
var point = "{\"Name\":\"Center\",\"X\":100,\"Y\":200}";
alert(point);
</script>
Run Code Online (Sandbox Code Playgroud)
如您所见,pointJavaScript 变量包含正确转义的有效 JSON 文本(JavaScript 对象)。