ajax如何从golang代码中获取数据?

我有一个 golang api,用于保存和检索表单中的数据。保存 HTML 表单中填充的数据是没问题的,它可以成功地将数据保存在 mongodb 的数据库中,在检索数据的情况下,它还将根据 html 表单字段中填写的电子邮件检索数据,但是它显示了 ubuntu 终端中的数据。下面是我正在尝试的代码:

Html form index.html file

<form id="form1" method="post">
    <input id= "firstname" type="text" name="FirstName"  placeholder="Enter your firstname"><br><br>
    <input id= "lastname" type="text" name="LastName" placeholder="Enter your lastname"><br><br>
    <input id= "email" type="text" name="Email" placeholder="Enter your email"><br><br>
    <input id= "mobile" type="text" name="Mobile" placeholder="Enter your mobile"><br><br>
    <button id= "button1" class="button" name="button" type="button" value="Submit">Submit</button>
    <button id= "button2" class="button" name="button" type="submit" value="Search">Search</button>
</form>

Ajax in index.html is :-

$(document).ready(function(){
    //IT will save the data 
    $('#button1').on('click', function(e){
        button=this.value;
        console.log(button);
        e.preventDefault();
        if (button === "Submit") {
            var FirstName =$("#firstname").val(),
            LastName =$("#lastname").val(),
            Email =$("#email").val(),
            Mobile =$("#mobile").val();
            console.log(FirstName);
            $.ajax({
                url:"/login",
                type:"POST",
                data: {'button':button, "first":FirstName, "last":LastName, "email":Email, "mobile":Mobile},
                success: function(results) {
                    console.log(results);
                    $('#response').html(results);
                }
            });
        }
    });
    // This will search and I want the result in the success
    $('#button2').on('click', function(e){
        button=this.value;
        console.log(button);
        e.preventDefault();
        var Email =$("#email").val();
        $.ajax({
            url:"/get-data",
            type: "GET",
            data:{'button':button,"email":Email},
            success: function(results){
                console.log(results)
                $('#response').html(results);
            }
        });
    });
 });

Main.go file

import (
 "fmt"
 "gopkg.in/mgo.v2"
 "gopkg.in/mgo.v2/bson"
 "html/template"
 "log"
 "net/http"
 "encoding/json"
)
type USER struct {
 FirstName string `json:"FirstName,omitempty"`
 LastName  string `json:"LastName,omitempty"`
 Email     string `json:"Email,omitempty"`
 Mobile    string `json:"Mobile,omitempty"`
}
func login(w http.ResponseWriter, r *http.Request) {
 fmt.Println("method:", r.Method)
 if r.Method == "GET" {
    t, _ := template.ParseFiles("index.html")
    t.Execute(w, nil)
 } else {
    r.ParseForm()
    fmt.Println(r.Form)
    if r.Form["button"][0] == "Submit" {
        fmt.Println(r.Form)
        session, err := mgo.Dial("mongodb://127.0.0.1:27017/user")
        if err != nil {
            panic(err)
        }
        defer session.Close()
        session.SetMode(mgo.Monotonic, true)
        c := session.DB("user").C("profile")
        doc := USER{
            FirstName: r.Form["first"][0],
            LastName:  r.Form["last"][0],
            Email:     r.Form["email"][0],
            Mobile:    r.Form["mobile"][0],
        }
        err = c.Insert(doc)
        if err != nil {
            panic(err)
        }
        fmt.Println("FistName:", r.Form["first"][0])
        fmt.Println("LastName:", r.Form["last"][0])
        fmt.Println("Email:", r.Form["email"][0])
        fmt.Println("Mobile:", r.Form["mobile"][0])
    }
 }
}

func AllData(w http.ResponseWriter, r *http.Request){
 fmt.Println("method:", r.Method)
 if r.Method == "GET" {
    r.ParseForm()
    fmt.Println(r.Form)
     if r.Form["button"][0] == "Search" {
        fmt.Println(r.Form)
        fmt.Println(r.Form["email"][0])
        session, err := mgo.Dial("mongodb://127.0.0.1:27017/user")
        if err != nil {
            panic(err)
        }
        defer session.Close()
        session.SetMode(mgo.Monotonic, true)
        c := session.DB("user").C("profile")
        result := Users{}
        err = c.Find(bson.M{"email": r.Form["email"][0]}).All(&result)
        fmt.Println(result)
        b, err := json.MarshalIndent(result, "", "  ")
        if err != nil {
            panic(err)
        }
        fmt.Printf("%s
", b)
    }
 }
}

func main() {
  http.HandleFunc("/login", login)
  http.HandleFunc("/get-data", AllData)
  err := http.ListenAndServe(":9090", nil)
  if err != nil {
      log.Fatal("ListenAndServe: ", err)
  }
}

用GET / code 方法请求数据时,我应该做什么,才能让结果成功显示在 ajax 函数中?先提前谢谢你。

1个回答



以json格式发送 Data </ code>函数的响应标头,并写入可以在以下位置接收的json的响应 $。ajax </ code> </ p>

  func AllData(w http.ResponseWriter,r * http.Request){
fmt.Println(“方法: “,r.Method)
如果r.Method ==” GET“ {
//您的代码....
b,err:= json.MarshalIndent(result,”“,”“)
如果是err != nil {
panic(err)
}
fmt.Printf(“%s
”,b)
//将标头设置为'application / json'
w.Header()。Set( “ Content-Type”,“ application / json”)
//编写响应
w.Write(b)
}
}
}
</ code> </ pre>

从处理程序函数 AllData </ code>返回的代码中也存在错误,如果要在结果中进行某些修改,请创建中间件,或者删除处理程序 AllData的返回部分 </ code> </ p>
</ div>

展开原文

原文

Send the response header of Data function in json format and write the response of json which can be received in success of $.ajax

func AllData(w http.ResponseWriter, r *http.Request) {
    fmt.Println("method:", r.Method)
    if r.Method == "GET" {
            // your code ....
           b, err := json.MarshalIndent(result, "", "  ")
           if err != nil {
               panic(err)
           }
           fmt.Printf("%s
", b)
           // set header to 'application/json'
           w.Header().Set("Content-Type", "application/json")
           // write the response
           w.Write(b)
       }
    }
}

Also there is an error in your code where you are returning from handler func AllData either create a middleware if you wants to do some modification in result or remove the return part of handler AllData

dongxibeng5324
dongxibeng5324 让我们继续聊天中的讨论。
2 年多之前 回复
doufei8250
doufei8250 为什么要给出我告诉你的错误呢? 您提供的代码可以正常工作,但是您能为我解释一下它实际上在做什么吗?
2 年多之前 回复
dongpu8935
dongpu8935 是的你可以。 但对于某些可以删除查询的地方,我来晚了。 我会查一下
2 年多之前 回复
doukao1925
doukao1925 可以提出疑问
2 年多之前 回复
duanshan3065
duanshan3065 是的,因为您的AllData返回用户是错误的。 请检查已编辑的代码。
2 年多之前 回复
drkj41932
drkj41932 现在它将给出以下错误:无法在参数http.HandleFunc中使用AllData(类型func(http.ResponseWriter,* http.Request)用户)作为类型func(http.ResponseWriter,* http.Request)
2 年多之前 回复
doujiyan0031
doujiyan0031 请检查编辑后的答案
2 年多之前 回复
dongpo7467
dongpo7467 它会给我一个错误,无法在w.Write ./main.go:98:1的参数中使用string(b)(字符串类型)作为类型[] byte:在函数末尾缺少返回./main.go:103 :18:无法在http.HandleFunc的参数中将AllData(func(http.ResponseWriter,* http.Request)用户类型)用作func(http.ResponseWriter,* http.Request)类型
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问