登录
首页 >  Golang >  Go问答

读取 Golang 中的 JavaScript XMLHttpRequest 发送的 POST 请求数据方法

来源:stackoverflow

时间:2024-02-26 12:03:26 281浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《读取 Golang 中的 JavaScript XMLHttpRequest 发送的 POST 请求数据方法》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

这是调用的 javascript 函数:

function cwk_submit_form() {
   var form = document.getelementbyid("form_id")
   var xhr = new xmlhttprequest();


   const fd = new formdata( form );
   for (const element of fd.entries()) {
       console.log(element)
   }

   xhr.open( "post", "http://localhost:8080/post_data" );
   xhr.setrequestheader("content-type", "application/x-www-form-urlencoded");

   xhr.send( fd );
}

我将 console.log 留在那里,以提及这确实打印出了正确的数据,这意味着问题似乎在于数据的传输方式。

接收响应的golang代码是:

func post_data(w http.responsewriter, r *http.request) {
    log.println("post was called")

    r.parseform()
    for key, value := range r.form {
        log.printf("%s = %s\n", key, value)
    }
}

此 for 循环没有打印任何内容。

如果我使用 html 表单来提交,如下所示:

那么上面的 golang 代码就可以正常工作,这让我相信 xmlhttprequest 格式就是问题所在。


正确答案


你的猜测是正确的,你的 js 代码有问题。

对于所有请求,ParseForm 都会从 URL 解析原始查询并更新 r.Form。

因此,当您发送的 Content-Type 和实际内容类型与 application/x-www-form-urlencoded 匹配(发生在 HTML 表单情况下)时,它将起作用。

另一方面,当您使用 FormData 时,它将作为 multipart/form-data 发送。

您需要将 XHR.send(FD) 替换为 XHR.send(new URLSearchParams(FD)) 才能发送 application/x-www-form-urlencoded 中的数据。

今天关于《读取 Golang 中的 JavaScript XMLHttpRequest 发送的 POST 请求数据方法》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>