Javascript Axios POST请求意外的数据格式

Javascript Axios POST请求意外的数据格式,javascript,php,json,axios,Javascript,Php,Json,Axios,我正在忙着测试Node.JS的Axios插件,在POST请求方面遇到了一些困难 对于测试,我有一个基本的PHP脚本 // Identify GET Request if(!empty($_GET)) { $type = "Req Type : GET"; $params = $_GET; $array = $_GET["array"]; $arrayVerify = gettype($array); } // Identify POST Request if(!empt

我正在忙着测试Node.JS的Axios插件,在POST请求方面遇到了一些困难

对于测试,我有一个基本的PHP脚本

// 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();
作为初始测试,我使用jQueryAjax,如下所示

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(); }
});
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;
我得到以下输出

{"type":"Req Type : POST","array":["One","Two","Three"],"arrayVerify":"array"}
{"type":"Req Type : POST","array":"One,Two,Three","arrayVerify":"string"}
它看起来像格式良好的JSON,数组仍然是一个数组,PHP将其识别为一个好的数组

然后当我从Node.js尝试使用Axios时

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":"array"}
{"type":"Req Type : POST","array":"One,Two,Three","arrayVerify":"string"}
数组似乎只是值的串联,PHP将其标识为字符串

JQuery似乎做到了我所期望的,但Axios没有做到,这是为什么?如何告诉Axios将数据用作JSON

更新

我也做了如下尝试

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(); }
});
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;
这给了我零

{"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"}

使用您已经尝试过的选项:

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端,您将不会填充
$\u POST
,而是使用
php://input

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

有关此答案的详细信息:

URLSearchParams不支持数组。如果您需要一个合适的JSON-将数据构建为常规JavaScript对象,然后使用
JSON.stringify(data)
使用
data={}
选项,然后在PHP端使用
var\u dump(file\u get\u contents(“php://input"));
查看此post请求的内容。完美,然后使用
json\u decode(file\u get\u contents(“php://input"));这里不用$\u POSTMore没问题@TheLovelySausage,我写了它非常感谢,这让我走上了正确的道路