[英]Pass Golang Variables into Javascript
我正在尝试将我的 Golang 变量传递到一个 Javascript 文件中。 我在网上看了多篇文章,包括How to pass variables and data from PHP to JavaScript? . 我觉得我已经很接近了,但是可惜这个问题的大多数 eloquent 实现都让我望而却步。
我正在寻找一个简单而优雅的解决方案,它在 Go 中注入一个 object 值,并在 Javascript 中注入一个变量。 我觉得这是一个非常普遍的问题,所以缺乏清晰的教程让我感到惊讶。
我的第一个文件 [server.go] 使用 Golang 中的模板库为 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 文件中,并将结构中的每个值 map 发送到 Javascript 文件中的一个变量。 我试过 AJAX 电话,但到目前为止还没有成功。
最后,在这个问题上花了 2 天之后,我找到了一个优雅的方法来解决它。 我们将使用模板来解决这个问题。
在此处阅读 golang 中的模板用法 -使用示例了解模板。
这是在 javascript 中传递名为golangVar的 golang 变量的示例代码。
HTML_文件 -
<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 文件的传递上有一点点变化。 阅读 - Buffalo 框架中的模板
这种方式可能有帮助:
网址:
<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;
}
您可以编写自己的模板 function 并使用它来将结构编组为 json。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.