我正在尝试将Golang变量传递到Javascript文件中。我在线阅读了多篇文章,包括How to pass variables and data from PHP to JavaScript?。我觉得我非常接近,但唉,这个问题最有说服力的实现使我望而却步。
我正在寻找一个简单而优雅的解决方案,在Go中使用Javascript 中的变量注入对象值。我觉得这是一个非常普遍的问题,因此缺乏明确的教程令我感到惊讶。
我的第一个文件[server.go]使用Golang中的模板库在上下文中传递并通过Handler提供服务来为HTML页面提供服务。
type PassStruct struct{
data []int
number1 int
number2 int
}
//inject the structure into render
func render(w http.ResponseWriter, tmpl string, context Context){
//parse context and fill in templating variables using template
}
我现在有一个提供的HTML文档,它会向其中添加一个Javascript文件。
<html>
<head>
//import javascript file
</head>
<body>
//some body
</body>
</html>
最后,javascript文件是我真正感兴趣的:
var data; //some
var number1;
var number2;
function doSomething(){
}
我需要将PassStruct发送到Javascript文件中,并将结构中的每个值映射到Javascript文件中的变量。我尝试过AJAX调用,但到目前为止还没有成功。
答案 0 :(得分:1)
最后,在这个问题上花了 2 天之后,我找到了一种优雅的方法来解决它。 我们将使用模板来解决这个问题。
在此处阅读有关 golang 中模板用法的信息 - Understanding Templates with Examples .
这是一个示例代码,用于在 javascript 中传递名为 golangVar 的 golang 变量。
HTML_File -
<html>
<head>
<script>
var golangVar = "{{.}}"
console.log(golangVar);
</script>
</head>
<body>
<!--some body-->
</body>
</html>
Golang HttpHandler -
确保在 golang 代码中包含“html/template”库。
func golangHttpHandler(w http.ResponseWriter, r *http.Request) {
var golangVar string
golangVar = "ProblemSolved"
templ, err := template.ParseFiles("/home/PathToHTMLPage/HTML_File.html")
if(err!=nil){
fmt.Println("Error = ",err)
}
err = templ.Execute(w, golangVar)
if(err!=nil){
fmt.Println("Error = ",err)
}
}
另外,一个额外的提示—— 如果您正在使用 golang 的 buffalo 框架,您可以使用默认的毛绒包进行模板化。 它类似于我们在这里所做的,只是在语法和 html 文件的传递上有一点点变化。 读 - Templating in Buffalo Framework
答案 1 :(得分:0)
这种方式可能有用:
HTML:
<html>
<head>
<!--import javascript file -->
<script type="text/javascript" src="static/myjs.js"></script>
<script type="text/javascript">
myFunc({{.}});
</script>
</head>
<body>
<!--some body-->
</body>
</html>
使用Javascript:(myjs.js)
function myFunc(passStruct){
var obj = Object();
var data = passStruct.Data;
var number1=passStruct.Number1;
var number2=passStruct.Number2;
obj.data=data;
obj.number1=number1;
obj.number2=number2;
return obj;
}