聚合物<;核心xhr>;-未发送POST参数

聚合物<;核心xhr>;-未发送POST参数,post,xmlhttprequest,polymer,Post,Xmlhttprequest,Polymer,我正在拼命尝试通过POST将数据发送到express.js应用程序。express.js应用程序工作正常,但由于任何原因,POST数据未正确发送到服务器: var xhrConfig = { url: "http://localhost:3000/test", body: {"foo": "bar"}, // body: JSON.stringify({"foo": "bar"}), // body: 'foo=bar', method: "POST" }; document

我正在拼命尝试通过POST将数据发送到express.js应用程序。express.js应用程序工作正常,但由于任何原因,POST数据未正确发送到服务器:

var xhrConfig = {
  url: "http://localhost:3000/test",
  body: {"foo": "bar"},
  // body: JSON.stringify({"foo": "bar"}),
  // body: 'foo=bar',
  method: "POST"
};
document.createElement('core-xhr').request(xhrConfig);
myexpress.js
console.log(req.body)
输出总是
{}
。无论正文是stringized、raw还是JSON。我还尝试了
params
,而不是
body
,只是为了确保

我在jQuery中也尝试了同样的方法,以排除在我的express.js路由中出现bug的可能性,但是
$.ajax({url:'http://localhost:3000/test,数据:{foo:'bar'},类型:'POST'})工作得非常好

那么,
req,body
总是空的原因是什么?有什么想法吗

//编辑:

body: "foo=bar",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},

这一个现在可以工作了,但是有没有一种方法可以使用
body:{“foo”:“bar”}
而不是首先将其转换为
foo=bar

据我所知,
core xhr
是一个低级元素,它的conf上的body对象不接受JS对象,而是要使用的字符串body

对于您描述的用途,您可以尝试
核心ajax
,这是一个可以配置对象的更高级别的元素。核心ajax上的文档:



希望能有帮助。如果您需要更详细的示例,请毫不犹豫地询问。

我在聚合物方面也遇到了这个问题。这个问题非常令人沮丧,因为没有太多关于核心xhr上聚合物的文档

由于您已经自己回答了第一个问题,我将回答后一个问题:是/否。如果您查看
的源代码,它只会将参数直接提供给
xhr.send(params)
。但是,在名为toQueryString的内部有一个方法,它执行您想要执行的操作

toQueryString: function(params) {
    var r = [];
    for (var n in params) {
      var v = params[n];
      n = encodeURIComponent(n);
      r.push(v == null ? n : (n + '=' + encodeURIComponent(v)));
    }
    return r.join('&');
  }

看起来express通过查看内容类型标题来确定它的主体类型,下面的内容适合我

this.$.xhr.request({
    url: "/my/url", 
    method: "POST",
    headers:{
        "Content-Type":"application/json"
    },
    body: JSON.stringify(survey), 
    callback: function(response){
        console.log(response);
    }
});
this.$.xhr.request({
    url: "/my/url", 
    method: "POST",
    headers:{
        "Content-Type":"application/json"
    },
    body: JSON.stringify(survey), 
    callback: function(response){
        console.log(response);
    }
});