Ajax 请求未发送到 Go Web 服务器

标签 ajax go

我刚开始学习 Web 开发、Go 和 Ajax,但我很难看出哪里出了问题。我试图简单地在客户端和服务器之间来回发送数据。通过 Ajax 请求,我将数据从表单发送到服务器,但它似乎没有到达服务器,因为日志没有打印“in posthandler”,这让我认为 ajax 请求有问题。附件是 main.go、index.html 和 js/getData.js 以及所有相关代码。

主.go

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "log"
)

var INDEX_HTML []byte

func main(){
    fmt.Println("starting server on http://localhost:8888/\nvalue is %s", value)
    http.HandleFunc("/", IndexHandler)
    http.HandleFunc("/post", PostHandler)
    http.ListenAndServe(":8888", nil)
}

func IndexHandler(w http.ResponseWriter, r *http.Request){
    log.Println("GET /")
    w.Write(INDEX_HTML)
}

func PostHandler(w http.ResponseWriter, r *http.Request){
    r.ParseForm()
    log.Println("in posthandler", r.Form)
    var value = r.FormValue("textfield")
    w.Write([]byte(value))
}
func init(){
    INDEX_HTML, _ = ioutil.ReadFile("./html/index.html")
}

index.html

<!doctype html>
<html>
  <head>
    <title>Page Title</title>
  <script src="js/getData.js"></script>
  </head>
  <body>
    <form action="/post" method="post">
      <textarea type="text" name="input" id="textfield"></textarea>
      <br />
      <input type="submit" name="button" id="button" value="Send" onclick="loadXMLDoc()"/>
    </form>
    <div id="fromserver">
    </div>
  </body>
</html>

js/getData.js

function loadXMLDoc() {
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("fromserver").innerHTML=xmlhttp.responseText;
    }
    }
    xmlhttp.open("POST","post",true);
    xmlhttp.send();
}

最佳答案

有两件事:

  • 没有处理程序呈现 Assets (在本例中为 js/.)
  • 由于“提交”HTML 元素,表单本身被提交。

这是你更新后的代码

主.go

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

var INDEX_HTML []byte

func main() {
    fmt.Println("starting server on http://localhost:8888/\nvalue is %s", "asdf")
    http.HandleFunc("/", IndexHandler)
    http.HandleFunc("/post", PostHandler)
    serveSingle("/js/getData.js", "./js/getData.js")
    http.ListenAndServe(":8888", nil)
}

func serveSingle(pattern string, filename string) {
    http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, filename)
    })
}

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    log.Println("GET /")
    w.Write(INDEX_HTML)
}

func PostHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    log.Println("in posthandler", r.Form)
    var value = r.FormValue("textfield")
    w.Write([]byte(value))
}
func init() {
    INDEX_HTML, _ = ioutil.ReadFile("./html/index.html")
}

index.html

<!doctype html>
<html>
  <head>
    <title>Page Title</title>
  <script src="js/getData.js"></script>
  </head>
  <body>
    <form action="/post" method="post">
      <textarea type="text" name="input" id="textfield"></textarea>
      <br />
      <input type="button" name="button" id="button" value="Send" onclick="loadXMLDoc()"/>
    </form>
    <div id="fromserver">
    </div>
  </body>
</html>

关于Ajax 请求未发送到 Go Web 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138952/

相关文章:

javascript - 要求 OPTIONS 的 DOJO AJAX 请求

javascript - JQuery .on ("click") 事件未触发

file - Golang 与 ffmpeg 动态视频编码

go - channel 什么时候阻塞 goroutine

go - Go 中的函数声明是否严格?

javascript - 如何使用ajax将php数组索引值传递给html元素

javascript - 在php中更新 session 超时的数据库表

php - ajax 加载数据的 Jquery 分页

oop - 戈兰 : Is there any way to access the "child" struct in the "parent" struct's methods in Go's composition model?

用于 golang 应用程序的 Docker