Как ajax получит данные из кода golang?

У меня есть API golang для сохранения и извлечения данных из формы. Можно сохранить данные, заполненные в HTML-форме. Означает, что он успешно сохранит данные в базе данных mongodb, но в случае получения данных он будет извлекать данные на основе электронного письма, заполненного в поле html-формы, успешно, но показывает данные в терминале ubuntu . Ниже приведен код, который я пытаюсь сделать для этого: -

HTML-форма index.html файл

<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 в index.html: -

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

Файл Main.go

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\n", b)
    }
 }
}

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

Что мне делать для получения данных из golang в запрос метода ajax GET, нажмите кнопку поиска, и результат отобразится в функции успеха ajax. Заранее спасибо.

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
0
4 959
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отправьте заголовок ответа функции Data в формате json и напишите ответ json, который может быть получен в случае успеха $.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\n", b)
           // set header to 'application/json'
           w.Header().Set("Content-Type", "application/json")
           // write the response
           w.Write(b)
       }
    }
}

Также в вашем коде есть ошибка, когда вы возвращаетесь из функции обработчика AllData, либо создайте промежуточное ПО, если вы хотите внести некоторые изменения в результат, либо удалите возвращаемую часть обработчика AllData

это даст мне ошибку cannot use string(b) (type string) as type []byte in argument to w.Write ./main.go:98:1: missing return at end of function ./main.go:103:18: cannot use AllData (type func(http.ResponseWriter, *http.Request) Users) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

gourav 02.05.2018 09:04

теперь он выдаст ошибку этого cannot use AllData (type func(http.ResponseWriter, *http.Request) Users) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

gourav 02.05.2018 09:06

да, потому что ваш AllData возвращает ошибку users. Пожалуйста, проверьте отредактированный код.

Himanshu 02.05.2018 09:08

Да, ты можешь. Но я опаздываю на то, где вы можете оставить свой вопрос. я проверю

Himanshu 02.05.2018 09:24

Почему он должен давать ошибку в том, что я вам сказал? Код, который вы даете, в порядке, он работает, но не могли бы вы объяснить мне, что на самом деле он делает?

gourav 02.05.2018 09:26

Позвольте нам продолжить обсуждение в чате.

Himanshu 02.05.2018 10:54

Другие вопросы по теме