如何使用golang解析POST AJAX数据?

时间:2016-11-20 05:25:34

标签: javascript ajax

我正在使用像这样的jax将数据发送到golang应用程序:

 httpRequest = new XMLHttpRequest();
 if (!httpRequest) {
     document.getElementById("errorArea").innerText = "Giving up :( Cannot create an XMLHTTP instance'";
  }

url =  "http://127.0.0.1:8080/putContent?url="+window.location.pathname;

httpRequest.onreadystatechange = sendContents;
httpRequest.open('POST', url);
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

var fd = new FormData();
fd.set ("data",document.getElementById("ta").value);
httpRequest.send(fd);

后端是这样的:

r.ParseForm()
fmt.Print("postform=")
fmt.Println(r.PostForm)

结果(将sdfsdf输入到textarea中):

 postform=map[------WebKitFormBoundarytZ4Y8wFVKpWBWBnu
 Content-Disposition: form-data:[]  name:["data"

 sdfsdf
 ------WebKitFormBoundarytZ4Y8wFVKpWBWBnu--
 ]] 
 ------------

修改

发现问题。问题是FormData将数据发送为curl -H 'Content-type: application/x-www-form-urlencoded' --data $'------WebKitFormBoundaryiVVK2EjSLDbqaccx\r\nContent-Disposition: form-data; name="data"\r\n\r\nsdfsdf\r\n------WebKitFormBoundaryiVVK2EjSLDbqaccx--\r\n' --compressed

而不是`curl --data“data = sdfsdf”

现在,真正的问题是如何让FormData发送普通数据?

2 个答案:

答案 0 :(得分:0)

您可以使用FormValue方法形式http.Request对象访问HTTP POST数据。我假设您的r*http.Request个对象。那么您应该可以使用data访问r.FormValue("data")。示例:

var myVariable string
myVariable = r.FormValue("data")

文档: Go-Lang net/http

答案 1 :(得分:0)

尝试在JS中设置请求内容类型。显然,浏览器在发送FormData()对象时会自动执行此操作。

Task

我无法找到关于此的特定官方声明,但如果查看所有各种FormData()演示,则不会设置请求内容类型。无论如何,它使用" multipart / form-data"。

在我的Go服务器上,典型的Go r.ParseForm()和解码器似乎在初始测试中运行良好。