Ax ios Неожиданный формат данных POST-запроса - PullRequest
0 голосов
/ 18 июня 2020

Я занят тестированием плагина Ax ios для Node.JS, и у меня возникли трудности с запросом POST.

Для тестирования у меня есть Basi c PHP script

// Identify GET Request
if(!empty($_GET)) {
   $type = "Req Type : GET";
   $params = $_GET;
   $array = $_GET["array"];
   $arrayVerify = gettype($array);
}

// Identify POST Request
if(!empty($_POST)) {
   $type = "Req Type : POST";
   $params = $_POST;
   $array = $_POST["array"];
   $arrayVerify = gettype($array);
}

$response = new stdClass();
$response->type = $type;
$response->array = $array;
$response->arrayVerify = $arrayVerify;
echo json_encode($response);
exit();

В качестве начального теста я использую JQuery Ajax как показано ниже

data = {};
data.array = ["One", "Two", "Three"];
$.ajax ({
   url      : "url_goes_here",
   type     : "POST",
   dataType : "json",
   data     : data,
   success  : function(res) { console.log(JSON.stringify(res)); },
   error    : function(res) { abandonAllHope(); }
});

Я получаю следующий результат

{"type":"Req Type : POST","array":["One","Two","Three"],"arrayVerify":"array"}

Что выглядит правильно сформированным JSON, массив по-прежнему является массивом, и PHP определил его как массив, который хорош

Затем, когда я пытаюсь использовать Ax ios из Node.js

var axios = require("axios");
var data = new URLSearchParams();
data.append("array", ["One", "Two", "Three"]);
axios ({
   url     : "url_goes_here",
   method  : "POST",
   data    : data
})
.then(function(res) { console.log(JSON.stringify(res.data)); })
.catch(function(res) { abandonAllHope(); });

Я получаю следующий результат:

{"type":"Req Type : POST","array":"One,Two,Three","arrayVerify":"string"}

Массив кажется просто конкатенацией значений, а PHP идентифицировал его как строку

JQuery, похоже, сделал то, что я ожидал а вот Axe ios этого не сделал, почему? Как мне сообщить Ax ios использовать данные как JSON?

ОБНОВЛЕНИЕ

Я также пробовал следующее

var axios = require("axios");
var data = {};
data.array = ["One", "Two", "Three"];
axios ({
   url     : lv_url,
   method  : "POST",
   data    : JSON.stringify(data)
})
.then(function(res) { console.log(JSON.stringify(res.data)); })
.catch(function(res) { });
return;

Что дало мне NULL

{"type":"Req Type : POST","array":null,"arrayVerify":"NULL"}

И я также пробовал

var axios = require("axios");
var data = {};
data.array = ["One", "Two", "Three"];
axios ({
   url     : lv_url,
   method  : "POST",
   params  : data
})
.then(function(res) { console.log(JSON.stringify(res.data)); })
.catch(function(res) { });
return;

Что дало мне все правильно, кроме запроса GET сейчас?

{"type":"Req Type : GET","array":["One","Two","Three"],"arrayVerify":"array"}

1 Ответ

1 голос
/ 18 июня 2020

Используйте опцию, которую вы уже пробовали:

var axios = require("axios");
var data = {};
data.array = ["One", "Two", "Three"];
axios ({
   url     : lv_url,
   method  : "POST",
   params  : data
})
.then(function(res) { console.log(JSON.stringify(res.data)); })
.catch(function(res) { });
return;

Но на стороне PHP у вас не будет $_POST заполнено, вместо этого используйте php://input:

 $data = json_decode(file_get_contents("php://input"));

Подробнее об этом ответе: { ссылка }

...