繁体   English   中英

将 Golang 变量传递给 Javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM