javascript - 从 Javascript 中的 FormData 获取数据并在 Golang 中处理
问题描述
我正在尝试通过 Javascript 从 HTML 网页中获取一些数据到我的 Golang 网络服务器。但是那里似乎没有收到数据。
这是我的 Javascript 函数,在我的网页下拉菜单中选择某些内容时会调用它:
async function onDataFormatSelect(dataFormat)
{
console.log('Change DataFormat', dataFormat);
let formDataSelect = new FormData();
formDataSelect.append("cmd", "change");
const fetchoptions = {
method: 'POST',
body: formDataSelect,
};
let r = await fetch('/myURL', fetchoptions);
console.log('HTTP response code.', r.status);
for (var pair of formDataSelect.entries()) {
console.log(pair[0]+ ', ' + pair[1]);
}
}
在我的 Go Webserver 的 SetupRoutes() 中,URL 得到一个 Handler:
http.HandleFunc("/myURL", urlHandler)
这是我的处理程序:
func urlHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
r.ParseForm()
topicName := r.FormValue("topicName")
cmd := r.FormValue("cmd")
log.Println("action: " + cmd)
switch cmd {
...
case "change": //Change DataFormat of Topic
log.Println("cmd is " + cmd)
newDataFormat := r.FormValue("dataFormat")
//Call another function
default:
log.Println("unknown command: " + cmd)
}
} else {
log.Println("using wrong method (GET)")
}
http.Redirect(w, r, appdata.Status.ProxyRedirect, http.StatusMovedPermanently)
}
Javascript 的输出是正确的。FormDataSelect 已正确填写,但在 Go 中“cmd”不存在。不知何故,在另一个具有相同设置的功能中,一切正常。
除了使用 XMLHttpRequest 之外,你能帮助我吗?或者你有什么解决方法吗?
解决方案
FormData 对象旨在支持发布文件,因此它们始终发送多部分请求。
请参阅Go 的 http 模块的文档。
你正在使用parseForm
它说:
当 Content-Type 不是 application/x-www-form-urlencoded 时,不读取请求 Body,r.PostForm 被初始化为非 nil 的空值
你需要ParseMultipartForm
改用。
推荐阅读
- python - tkinter GUI 中的多个 matplotlib 实例
- sql - 如何找出两个单独查询的结果是否匹配?
- java - 如何在 Cloudfront 中存储经常变化的静态文件?
- javascript - E Bay API 调用错误“权限不足,无法完成请求”
- apache-spark - PySpark:(广播)在最近的日期时间/unix 上加入两个数据集
- node.js - 从 sdk_aws 获取依赖项
- python - 使用 pip 安装 numpy 安装时出错
- mysql - 使用 docker 容器的错误时间戳:时区设置无效
- r - 地图中一组特定国家的边界线
- java - 从 RecyclerView 中的项目触发单击和拖动操作