目前我遇到的问题是将Golang变量分配给Javascript变量。我正在使用Golang模板,因此,从后端我发送了一个JSON变量,就像这样:
var c []models.C
b, _ := json.Marshal(c)
err = tpl.ExecuteTemplate(w, "index.gohtml",string(b))
如您所见,我有一个切片,将其转换为Json,然后将Json转换为字符串,并将其发送到模板。然后,在前端我需要将它分配给变量,它应该是有效的JSON,我有这个:
var rowData = {{.}};
但是,我得到了SyntaxError: expected property name, got '{'
所以,我的问题是:我应该如何分配JSON?
答案 0 :(得分:4)
首先,您必须使用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>`
输出(在Go Playground上尝试):
<script>
var point = "{\"Name\":\"Center\",\"X\":100,\"Y\":200}";
alert(point);
</script>
如您所见,point
JavaScript变量包含正确转义的有效JSON文本。