当前位置: 首页 > 知识库问答 >
问题:

将 Golang 变量分配给 Javascript

夏知
2023-03-14

目前,我遇到了一个与将Golang变量分配给Javascript变量相关的问题。我正在使用Golang模板,因此,我从后端发送了一个JSON变量,就像这样:

 var c []models.C
 b, _ := json.Marshal(c)
 err = tpl.ExecuteTemplate(w, "index.gohtml",string(b))

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

var rowData = {{.}};

但是,我得到的是语法错误:预期的属性名,得到的是“{”

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

共有2个答案

令狐新翰
2023-03-14

您可以编写自定义模板函数,将结构封送到json中。这样,您就不必自己在处理程序中封送所有结构。特别是当您需要HTML模板和JS脚本中的结构时。

使用杜松子酒的示例

主要是。go文件。

    router := gin.New()
    router.SetFuncMap(template.FuncMap{
        "json": func(s interface{}) string {
            jsonBytes, err := json.Marshal(s)
            if err != nil {
                return ""
            }
            return string(jsonBytes)
        },
    })

在处理程序函数中。

type MyStruct struct {
    Foo string `json:"foo"`
}

func Handler(ctx *gin.Context) {
    myStruct := MyStruct{
        Foo: "test",
    }
    
    ctx.HTML(http.StatusOK, "template-file.go.html", gin.H{
        "MyStruct":   myStruct,
    })
}

最后,在您的template.go.html文件中添加一个脚本标记并在此处定义您的全局变量。稍后您可以在JS文件中访问它们。

<script type="text/javascript">
    // NB on JSON.parse and json functions!
    let event = JSON.parse({{ json .MyStruct }});
</script>

// Below you can import your JS file as usual.
<script type="text/javascript" src="/assets/js/index.js"></script>
沈伟
2023-03-14

首先,您必须使用 html/template 而不是文本/模板,因为前者提供上下文相关的转义。

其次,在模板中,上下文必须明确它是JavaScript代码,例如它必须在超文本标记语言

请参阅此工作示例:

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>

如您所见,JavaScript 变量包含有效的 JSON 文本(JavaScript 对象),已正确转义。

 类似资料:
  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。

  • 问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上:

  • 您好,我正在开发一个swing聊天应用程序,其中聊天历史记录存储在一个xml文件中。在NetBeans项目中完成后,我能够获取xml文件并将其显示在表中 但是当转换成jar文件时,我无法使用xml文件。我尝试过各种方法,比如getClass()。getResource()方法,但它检索URL而不是字符串,如果使用toString()方法将其转换为字符串,则无法将其用作解析xml文件的有效路径。 下

  • 我是helm的新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。 我为每个环境(其中

  • 问题内容: 在上面,这是硬代码。我想将 变量 分配 给值。即,均值=注册; 让我知道! 问题答案: 您的问题不是很清楚。我假设变量是在Servlet中声明的,因为在JSP中使用Java是一种不好的做法。为了能够在转发到JSP的Servlet之间共享变量,您需要将此变量设置为request属性: 然后在JSP中,您可以使用JSP EL获得“ registration”属性的值: 您应该阅读Java

  • 问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。