聚合物<;核心xhr>;-未发送POST参数
我正在拼命尝试通过POST将数据发送到express.js应用程序。express.js应用程序工作正常,但由于任何原因,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
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.jsconsole.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);
}
});