thinkphp 接收前端java传参 获取不到数据
2017-07-22 15:18
423 查看
公司开发一款APP,后台写了个接口,获取前端java传参数据,结果用I(), $_GET(),$_POST()等都获取不到数据…
排错过程:
1.url传参测试可以获取数据;
2.肯定是服务器端的问题,尝试用
于是改用下面的代码获取数据,成功!
PS:有时候解析成 关联数组 还是取不到数据,特别是前端只传一个参数的时候,那就解析成 对象 来取参数,上述中:
总之,先看看$tmp里面有没有获取到前端传过来的内容,如果有内容,问题肯定是出在后端了,用一切办法根据$tmp里内容的格式,把需要的参数取出来。
后记:经过查看前端接口传参的代码,发现一个问题:
安卓 用 Okhttp2.x 版本传参的时候如果使用RequestBody.create(JSON,jsonObject.toString()); 后端不容易获取到前端传递的数据。
安卓关键代码如下:
而用 Okhttp3.x 版本中 后台很容易就获取到前端传参了
安卓关键代码如下:
排错过程:
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(); }
相关文章推荐
- thinkphp3.2 后台接收安卓前端传参出问题(取不到参数数据)
- Springmvc-将前端数据映射成JAVA对象接收实例
- Java接收Cordys中webservice接口的返回数据并解析xml获取相应节点数据
- java socket编程服务器接收不到数据
- java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据
- mac OS 运行git报错; 前端ajax请求, 数据跨域,前端获取不到数据
- kafka java消费者获取不到数据
- java web 前端获取数据 数据库传值给前端显示
- java从前端获取excel表并进行解析,将数据保存数据库
- ThinkPHP定时ajax获取后台数据,使用javascript动态修改前端页面的表格来显示数据
- java后台设置可跨域访问,前端ajax获取json数据,解决浏览器限制跨域访问的问题
- java接收不到ios端的post请求数据
- ajax接收java后台传过来的json数据乱码及获取字段undefind问题
- JAVA springMVC前端传参到后端和接收
- java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据
- angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法
- thinkphp框架中,URL传参c/123,接收不到参数的问题
- java查询语句包含中文获取不到数据库数据
- 加上FastJsonHttpMessageConverter之后,前端获取不到数据