Ajax 如何在golang中以标准方式从http请求中获取数据?

Ajax 如何在golang中以标准方式从http请求中获取数据?,ajax,http,curl,go,Ajax,Http,Curl,Go,我正在尝试从golang中的http请求获取数据。我正在使用net/http包。在我的服务器处理程序中,我试图从r.Body获取数据 body, err := ioutil.ReadAll(r.Body) if err != nil { log.Printf("FATAL IO reader issue %s ", err.Error()) } 当我使用一些输入数据对服务进行卷曲时,它工作得很好 curl --data '{"AppName":"Proline","Properties

我正在尝试从golang中的http请求获取数据。我正在使用net/http包。在我的服务器处理程序中,我试图从r.Body获取数据

body, err := ioutil.ReadAll(r.Body)
if err != nil {
    log.Printf("FATAL IO reader issue %s ", err.Error())
}
当我使用一些输入数据对服务进行卷曲时,它工作得很好

curl --data '{"AppName":"Proline","Properties":null,"Object":"","Timestamp":"2016:03:27 00:08:11"}' -XGET http://localhost:8081/api/services/test/
但当我试图从ajax调用此服务时,call r.Body是空的

requestJSON = '{"AppName":"Proline","Properties":null,"Object":"","Timestamp":"2016:03:27 00:08:11"}'
$.ajax({
  type: "GET",
  url: "http://localhost:8081/api/services/test/",
  data: requestJSON,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data){alert(data);},
  failure: function(errMsg) {
      alert(errMsg);
  }
});
所以我改为从
r.Form

r.ParseForm()
var body []byte
for key, _ := range r.Form {
    body = []byte(key)
    break
}

但是现在curl请求失败了。在golang中是否有从http请求检索输入数据的标准方法?我正在使用Go 1.6。有人能帮我吗?

规范不允许通过GET请求发送有意义的正文。因此,您的浏览器可能发送了一个空正文。你可以用POST代替。
r.ParseForm()
不起作用并不奇怪,因为它希望主体由
application/x-www-form-urlencoded
编码。不
json

如果GET更适合将用户输入发送到服务器的请求处理程序,则可以使用url查询参数

引用JQuery.ajax()作为数据参数

要发送到服务器的数据。如果需要,它将转换为查询字符串 还不是字符串。它被附加到GET请求的url。看见 processData选项以阻止此自动处理。对象必须 必须是键/值对

所以你可以

$.ajax({
  type: "GET",
  url: "http://localhost:8081/api/services/test/",
  data: {AppName: "Proline", Properties:null, Object: ""}, // An object, not a string.
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data){alert(data)}
})
服务器中的

params := r.URL.Query()
params.Get('AppName') // returns 'Proline'

请参阅文档:

规范不允许使用GET请求发送有意义的正文。因此,您的浏览器可能正在发送空正文。你可以用POST代替。
r.ParseForm()
不起作用并不奇怪,因为它希望主体由
application/x-www-form-urlencoded
编码。不
json

如果GET更适合将用户输入发送到服务器的请求处理程序,则可以使用url查询参数

引用JQuery.ajax()作为数据参数

要发送到服务器的数据。如果需要,它将转换为查询字符串 还不是字符串。它被附加到GET请求的url。看见 processData选项以阻止此自动处理。对象必须 必须是键/值对

所以你可以

$.ajax({
  type: "GET",
  url: "http://localhost:8081/api/services/test/",
  data: {AppName: "Proline", Properties:null, Object: ""}, // An object, not a string.
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data){alert(data)}
})
服务器中的

params := r.URL.Query()
params.Get('AppName') // returns 'Proline'

请参阅文档:

您是否尝试过以POST的形式发送?@非高尔夫球手-POST与
r.Form
配合良好。无法在GET中发送数据吗?[但这可能不是一个好的做法]。带有正文的http GET请求是不常见的。我认为这也违反了规范。所以我认为你的浏览器不允许这样做。是的,这不是一个好的做法。使用POST@ArunaHerath-Hmmm。如果我想通过API传递一些id等来获取一些值,我需要在输入权限中添加id。您可以使用POST(在正文中包含数据)或get(可能使用包含要验证的凭据的标题)。身体不行。你试过用POST发送吗?@Not_a_高尔夫球手-POST在
r.Form
上运行良好。无法在GET中发送数据吗?[但这可能不是一个好的做法]。带有正文的http GET请求是不常见的。我认为这也违反了规范。所以我认为你的浏览器不允许这样做。是的,这不是一个好的做法。使用POST@ArunaHerath-Hmmm。如果我想通过API传递一些id等来获取一些值,我需要在输入权限中添加id。您可以使用POST(在正文中包含数据)或get(可能使用包含要验证的凭据的标题)。你不能和一具尸体混在一起。