【问题标题】:Assign Golang variable to Javascript将 Golang 变量分配给 Javascript
【发布时间】:2018-01-11 07:20:12
【问题描述】:

目前我遇到了一个与将 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?

【问题讨论】:

  • 我不确定你想要达到什么目标,但是这个 {{.}} 看起来不像 JSON -> jsonlint.com
  • 请展示完整的例子。 “SyntaxError:预期的属性名称”不是 Go 错误。你的模板的输出是什么?这是文本模板吗?为什么不只是fmt.Sprintf("var rowData = %s;", b)
  • @Edwin with {{.}} 我在前端打印 Golang 变量。 {{.}} 这不是值,它是访问变量的一种方式
  • @JimB 我同意,这是一个 Javascript 问题,因为我正在尝试将 Go 变量(它是一个字符串,但 JSON 有效)分配给 JS 变量
  • @SrednyMCasanova 没有显示使用位置的代码,很难判断这是在模板中使用还是只是在模板的输出中使用。

标签: javascript json go go-templates


【解决方案1】:

首先,您必须使用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 文本(一个 JavaScript 对象),已正确转义。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2014-04-23
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多