javascript — правильный формат для отправки запроса от 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"}

Это дает действительно странный массив $ _POST в PHP:

// 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

Решение

После некоторого тестирования с 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 более легким.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector