开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情 如果是 post 接收数据,那么前端传递数据类型一般是两种,一种是:application/x-www.urlencoded ,用这种方式传递数据时,前端类型可以是array、josn、string 等。后端接收就是字符串。
除了上边这一种,还有一种前端传递数据是:form-data ,form-data
两者区别:application/x-www-urlencodeed 和form-data 对数据传递的处理不一样,form-data更重视数据的方式,它采用的是二进制,所以不会存在多余的数据。适合大文本数据的传输,例如文件等。
php直接用$_POST["参数名"]
情况1:参数是普通的字符串
其实这里的接收不到数据,是指小程序访问时接收不到。
php代码:
$postData=$_POST["a"];
echo $postData;
apipost工具访问:是可以接收到数据,并且可以返回数据
小程序代码:接收不到数据,所以返回值为空
wx.request({
url: 'http://localhost/api/demo.php',
method:"POST",
data:{
"a":1
},
header:{
"content-type":"application/x-www-urlencoded"
},
success:(res)=>{
console.log("返回的数据是:::::>>>>>>",res);
}
})
情况2:参数是数组
代码与上边代码一样,只是参数改变。
apipost工具访问的结果:
使用小程序访问:
第二种情况的结论:api工具返回的是数组形式,但是小程序返回的是字符串是有区别的。
所以,修改一下php代码,查看一下通过小程序访问和api工具访问有哪些不同的地方:
php代码如下:
$postData=$_POST["a"];
if(is_array($postData)){
echo "参数为数组";
}
if(is_string($postData)){
echo "参数为字符串";
}
die;
api工具打印的是:
小程序打印是:
如果参数是数组php转义后的结果
$postData=$_POST["a"];
if(is_array($postData)){
echo "参数为数组";
}
if(is_string($postData)){
echo "参数为字符串";
}
//使用转义方法转义后
$postList=json_decode($postData);
var_dump($postList);
die;
api工具打印的结果:
但是小程序打印的结果是:
所以得出一个结论是:小程序如果参数为数组,则不能够直接写数组,而是要做处理,我这里的处理是转成字符串后进行提交。
小程序修改代码如下:
wx.request({
url: 'http://localhost/api/demo.php',
header:{
"content-type":"application/x-www-form-urlencoded"
},
method:"POST",
data:{
a:JSON.stringify(["张飞","关羽"]) //刚修改的代码
},
success:(res)=>{
console.log("返回的数据是:::::>>>>>>",res);
}
})
返回的结果:
打印的结果和api工具是一样了。
php如何处理数组对象呢,php代码如下:
$postData=$_POST["a"];
// if(is_array($postData)){
// echo "参数为数组";
// }
// if(is_string($postData)){
// echo "参数为字符串";
// }
//使用转义方法转义后
$postList=json_decode($postData);
foreach($postList as $value){
var_dump($value);
}
die;
小程序结果和api工具结果都是正常的,php是可以读取到内容的。
情况3:参数为数组,数组里边嵌套对象
php代码不变,小程序代码如下:
wx.request({
url: 'http://localhost/api/demo.php',
header:{
"content-type":"application/x-www-form-urlencoded"
},
method:"POST",
data:{
a:JSON.stringify([{id:1,name:"郑飞"},{id:2,name:"关羽"}])//修改位置
},
success:(res)=>{
console.log("返回的数据是:::::>>>>>>",res);
}
})
返回结果如下截图,得出结果是:对象会转变成一个关联数组
api工具参数的改变后,获取的结果如下:
验证是否是关联数组
修改php代码为如下:
$postData=$_POST["a"];
//使用转义方法转义后
$postList=json_decode($postData);
//$value是一个关联数组
foreach($postList as $value){
echo $value->id;
echo $value->name;
}
die;
测试的结果:
小程序:复合预期
api工具:复合预期: