Ajax 请求未发送到 Go 网络服务器

Ajax Request not sending to Go web server

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

main.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();
}

有两件事:

  • 没有处理程序呈现资产(在这种情况下 js/.
  • 由于 "submit" HTML 元素,表单本身被提交。

这是您更新后的代码

main.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>