我尝试使用Axios(因为它很轻)来发布对PHP的发布请求。这是我的帖子请求代码:
var params = {
method: 'post',
url: 'http://myurl.com',
data: myData,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
axios(params).then(...).catch(...);
我使用以下myData
获得了轻微的成功:
var myData = {
data: {
lastRequest: '2017-10-19T17:09:10.943Z'
},
validationType: 'timestamp'
}
奇怪的是,在PHP中,它在$ _POST中显示为数组键:
// var_dump of $_POST
'{"data":{"lastRequest":"2017-10-19T17:09:10.943Z"},"validationType":"timestamp"}' => ''
所以,虽然它有点奇怪,但我可以用它做点什么。但是,我还想从第三方API发送更复杂的数据:
var myData = {
data: {
coord: {
lon: -9.99,
lat: 52.71
},
weather: [
{
id: 802,
main: 'Clouds',
description: 'scattered clouds',
icon: '03d'
}
],
// etc
},
validationType: "weather"
}
这会在PHP中产生一个非常奇怪的$ _POST数组:
// var_dump of $_POST
'{"data":{"coord":{"lon":-9_99,"lat":52_71},"weather":' => [
'{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}' => ''
]
我无能为力。我无法看清我做错了什么。我知道还有一些其他类似的StackOverflow问题,但我找不到任何令人满意的答案。非常感谢任何帮助,谢谢!
编辑:关于URLSearchParams
:
似乎可以使用简单的键值对...
var myData = new URLSearchParams();
myData.append('lastRequest', '2017-10-19T17:09:10.943Z');
console.log(myData.toString()); // lastRequest=2017-10-19T17%3A09%3A10.943Z
...和数组:
myData.append('myArray', ['foo', 'bar']);
console.log(myData.toString()); // myArray=foo%2Cbar (%2C is a comma)
但它没有处理对象,这在我的情况下非常重要:
myData.append('myObject', {foo: 'bar'});
console.log(myData.toString()); // myObject=%5Bobject+Object%5D
答案 0 :(得分:0)
在使用Postman和jQuery进行一些测试后,我得出结论,这可能是Axios的一个问题。以下jQuery代码(在我看来相当于上面的Axios代码)完全符合我的要求:
$.ajax({
method: 'post',
url: 'http://myurl.com',
data: myData,
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
我希望使用更轻量级的库,但更重要的是它的工作原理!
编辑:遇到jQuery Builder,这有助于使jQuery更轻量级。