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();
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 从mysql中查最后一条记录
- 下一篇: js二维数组定义和初始化的三种方法