光纤 Web 框架无法发送 ajax 请求

原谅我,但我不太懂英语。我使用翻译 deepl.com。在这一点上,俄罗斯程序员无法帮助我。我不是一个程序员,“我只为自己编程”。我有一个问题 - 我无法向服务器发送 POST (JSON) 请求。


我想做什么 - Fiber的服务器通过POST请求(JSON,XMLHttpRequest)从html页面获取2个参数,并在处理后服务器给我一个字符串。我使用Fiber是因为我曾经为自己制作了一个小型静态网站,并且在“示例”中都很清楚。我做了一个快速的ctrl+ C - ctrl + V,只是调整了我的代码。然后我调整了html,js,css。我有一个工作网站!:-)


main.go - 启动服务器(这里没有问题)


package main

 

import (

    "github.com/gofiber/fiber"

    "github.com/gofiber/fiber/middleware/logger"

)

 

func main() {

    app := fiber.New()

    app.Use(logger.New())

    app.Static("/", ".")

 

    app.Get("/", func(c *fiber.Ctx) error {

        return c.SendFile("./main.html")

    })

 

    app.Post("/search", PostTodo)

 

    app.Listen(":3003")

 

}

search.go - 关于接收数据后要做什么的逻辑。(到目前为止只是一种模板,有一个小问题,但它大多有效)。


package main

 

import (

    "fmt"

 

    "github.com/gofiber/fiber"

)

 

type Response_JSON struct {

    Name    string `json:"name"`

    Surname string `json:"surname"`

}

 

func PostTodo(c *fiber.Ctx) error {

    type request struct {

        Name    string `json:"name"`

        Surname string `json:"surname"`

    }

 

    var body request

 

    err := c.BodyParser(&body)

    if err != nil {

        return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{

            "error": "Cannot parse JSON",

        })

    }

    fmt.Println("body: ", err)

 

    todo := Response_JSON{

        Name:    body.Name,

        Surname: body.Surname,

    }

 

    fmt.Println("todo: ", todo)

    my_request := "<div>" + todo.Name + "</div>"

    my_request = my_request + "<hr><div>" + todo.Surname + "</div>"

 

    return c.SendString(my_request)

}

主页面.html - 首页


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Proba</title>

</head>


冉冉说
浏览 95回答 1
1回答

紫衣仙女

你看到的问题与Go(甚至Fiber)无关,这是因为你的表单会立即发布,javascript没有机会触发。您需要添加以阻止事件“冒泡”并触发表单提交。preventDefault();// Bind the call to the variable 'e'mybutton.addEventListener("click", (e) => {&nbsp; &nbsp;// Add this line!&nbsp; &nbsp;e.preventDefault();/* ... the rest is the same ... */
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go