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

公司开发一款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();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值