您的位置:首页 > Web前端

thinkphp 接收前端java传参 获取不到数据

2017-07-22 15:18 423 查看
公司开发一款APP,后台写了个接口,获取前端java传参数据,结果用I(), $_GET(),$_POST()等都获取不到数据…

排错过程:

1.url传参测试可以获取数据;

2.肯定是服务器端的问题,尝试用

file_get_contents("php://input");


于是改用下面的代码获取数据,成功!

public function getItemInfo()
{

$tmp = file_get_contents("php://input");
$arr = json_decode($tmp,true);

$tid = $arr['itemId']?$arr['itemId']:I('itemId');//三目运算符里的I()为了兼容url传参的,前端是新手,有时候混合着用,所以先这么写了
$uid = $arr['uid']?$arr['uid']:I('uid');
$location = $arr['location']?$arr['location']:I('location');

if(!$uid) $uid = 'unreg';//未传用户uid,默认设置 为 uid = 'unreg'的用户

if(!$tid){

$this->error('扫描出错',0);
}
//下面代码省略...
}


PS:有时候解析成 关联数组 还是取不到数据,特别是前端只传一个参数的时候,那就解析成 对象 来取参数,上述中:

//$arr = json_decode($tmp,true);改成
$obj = json_decode($tmp);
//$tid = $arr['itemId']?$arr['itemId']:I('itemId');改成:
$tid = $obj->itemId?$obj->itemId:I('itemId');
//$uid = $arr['uid']?$arr['uid']:I('uid'); 改成:
$uid = $obj->uid?$obj->uid:I('uid');


总之,先看看$tmp里面有没有获取到前端传过来的内容,如果有内容,问题肯定是出在后端了,用一切办法根据$tmp里内容的格式,把需要的参数取出来。

后记:经过查看前端接口传参的代码,发现一个问题:

安卓 用 Okhttp2.x 版本传参的时候如果使用RequestBody.create(JSON,jsonObject.toString()); 后端不容易获取到前端传递的数据。

安卓关键代码如下:

String uid = "asdf24";//uid准备传给后台
JSONObject jo = new JSONObject();
jo.put("uid",uid);//对象赋值
//创建请求内容 对象jo 就是在这里 被转成JSON格式的
RequestBody body = RequestBody.create(JSON,jo.toString());
//创建一个请求对象
Request request = new Request.Builder()
.url(url)
.post(body)
.build();

//以下代码 Okhttp2.x 和 Okhttp3.x基本相同,不用看了
Call call = client.newCall(request);
try {
Response response = call.execute();
str = response.body().string();

} catch (IOException e) {
e.printStackTrace();
}


而用 Okhttp3.x 版本中 后台很容易就获取到前端传参了

安卓关键代码如下:

//创建请求内容,并赋值
RequestBody body = new FormBody.Builder()
.add("uid", "asdf24")
.build();
//创建一个请求对象
Request request = new Request.Builder()
.url(url)
.post(body)
.build();

//以下代码 Okhttp2.x 和 Okhttp3.x基本相同,不用看了
Call call = client.newCall(request);
try {
Response response = call.execute();
str = response.body().string();

} catch (IOException e) {
e.printStackTrace();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息