关于通用化的api格式输出,我来说点意见

来源:4-10 玩转中间件处理

hippo417

2020-03-05

代码一:

class school extends BaseController
{
    public function index(){
//        获取参数值,并转换后赋值
        $UserId = $this->request->param("userid", 1,"intval");
//       如果为空,输出code为1
        if (empty($UserId)){
            return show(config("status.error"),"参数错误");
        }
        $modelObj = new SchoolModel();
        $results = $modelObj->getUserID($UserId);
        $school =  [
            'code' => 0,
            'msg' => "",
            'count' => 11,
            'data' => $results,
        ];
       return json($school);
//        return show(config("status.success"),"",11,$results);
    }
}

输出数据后,后台能正常获取到参数:
图片描述
代码二:

class school extends BaseController
{
    public function index(){
//        获取参数值,并转换后赋值
        $UserId = $this->request->param("userid", 1,"intval");
//       如果为空,输出code为1
class school extends BaseController
{
    public function index(){
//        获取参数值,并转换后赋值
        $UserId = $this->request->param("userid", 1,"intval");
//       如果为空,输出code为1
        if (empty($UserId)){
            return show(config("status.error"),"参数错误");
        }
        $modelObj = new SchoolModel();
        $results = $modelObj->getUserID($UserId);
//        $school =  [
//            'code' => 0,
//            'msg' => "",
//            'count' => 11,
//            'data' => $results,
//        ];
//       return json($school);
        return show(config("status.success"),"",11,$results);
    }
}

输出数据后后台不能正常获取到参数:
图片描述

两段代码,浏览器显示输出结果一样,但后台网页只有代码一可以获取的参数,代码二不能获取到。摸索了好长时间,终于找到问题了:

function show($status, $message ,$count, $data = [] ,$httpStatus = 404){
    $status = [
        'code' => $status,
        'msg' => $message,
        'count' =>$count,
        'data' => $data,

    ];
    echo json_encode($status, $httpStatus);

老师给的输出方式是:

return json($status, $httpStatus);

我改成:

echo json_encode($status, $httpStatus);

问题解决了!!!
老师,是故意挖的坑吗?:)

写回答

1回答

singwa

2020-03-05

您好。不是的哈。json是 TP内部的 json数据输出方式, 他支持http状态码的传递。

//img1.sycdn.imooc.com/szimg/5e60e77d092647a810220426.jpg

您这个地方传递 httpStatus 是没有任何作用的。



tp内部的json 

以及PHP内置的json_encode都行

 但是如果你用tp提供的json 你需要在 前端js代码拿到数据的时候需要做一层处理。

可以截图你那边的代码我看看。js代码

0
1
hippo417
//请求登入接口 admin.req({ url: 'http://localhost/admin/login/check' //实际使用请改成服务端真实接口 , data: obj.field ,type: "POST" , done: function (res) { if(res.code == 0) { //请求成功后,写入 access_token layui.data(setter.tableName, { key: setter.request.tokenName , value: res.data.access_token }); //登入成功的提示与跳转 layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 }, function () { location.hash = search.redirect ? decodeURIComponent(search.redirect) : '/'; }); } else { layer.msg(res.msg, { offset: '15px' , icon: 2 , time: 1000 }); } } });
2020-03-05
共1条回复

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1458 学习 · 1310 问题

查看课程