将Golang变量分配给Javascript

时间:2017-08-03 15:19:04

标签: 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))

如您所见,我有一个切片,将其转换为Json,然后将Json转换为字符串,并将其发送到模板。然后,在前端我需要将它分配给变量,它应该是有效的JSON,我有这个:

var rowData = {{.}};

但是,我得到了SyntaxError: expected property name, got '{'

所以,我的问题是:我应该如何分配JSON?

1 个答案:

答案 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文本。