从axios到PHP的发布请求的正确格式

时间:2017-10-19 18:02:28

标签: javascript php axios

我尝试使用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

1 个答案:

答案 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更轻量级。