У меня есть 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. Заранее спасибо.
Отправьте заголовок ответа функции 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 AllData (type func(http.ResponseWriter, *http.Request) Users) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc
да, потому что ваш AllData
возвращает ошибку users
. Пожалуйста, проверьте отредактированный код.
Да, ты можешь. Но я опаздываю на то, где вы можете оставить свой вопрос. я проверю
Почему он должен давать ошибку в том, что я вам сказал? Код, который вы даете, в порядке, он работает, но не могли бы вы объяснить мне, что на самом деле он делает?
Позвольте нам продолжить обсуждение в чате.
это даст мне ошибку
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