将Golang变量传递给Javascript

时间:2016-05-25 01:50:18

标签: javascript jquery html ajax

我正在尝试将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调用,但到目前为止还没有成功。

2 个答案:

答案 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;
 }