8-12 接口验证 Json显示"Unexpected 's'"

来源:8-12 Theme接口验证与重构

吃了饿饿了又吃

2017-05-27

老师你好

8-12 接口验证 postman选择Json显示是"Unexpected 's'" ,在html下是正常显示的.

必须在加上theme下的getSimpleList加上json('success');显示正常. 

上一个也出现了同样问题,没找到方法就跳过了,这次又是如此,所以向你提问,不知道别的同学有没有这个状况。 我看视频是没有添加 json()方法,就反馈是正常的。


下图,最左边是老师视频的反馈。 中间是最后加上json方法。 右边是没加json()的显示错误

http://szimg.mukewang.com/5929395500014f6718890593.jpg

写回答

5回答

7七月

2017-05-27

出现unexpect这个问题是因为,再postman里,会尝试格式化成json,而你返回的不是json而是一个字符串。你可以尝试在浏览器里访问应该就不会出现这个问题。或者:你return一个json格式的对象,也能正确得到结果。其实返回是没问题的。

1
2
7七月
回复
吃了饿饿了又吃
没关系,老师本来就应该答疑解惑。
2017-05-27
共2条回复

吃了饿饿了又吃

提问者

2017-05-29

解决的办法: 在config.php中把默认输出改成json,// 默认输出类型
'default_return_type'    => 'json',

0
0

吃了饿饿了又吃

提问者

2017-05-27

访问地址;http://wx.zerg.com/api/v1/theme?ids=1,2,3

 

V1/Theme.php

<?php

namespace app\api\controller\v1;

use app\api\validate\IDCollection;
use think\Controller;
use app\api\model\Theme as ThemeModel;

class Theme extends Controller
{
    /*
     * @url /theme?ids=id1,id2,id3,....
     * @return 一组theme模型
     * */
    public function getSimpleList($ids=''){
        (new IDCollection())->goCheck();
        return 'success';
    }
}


route.php

Route::get('api/:version/theme','api/:version.Theme/getSimpleList');

 

IDCollection.php

<?php

namespace app\api\validate;

class IDCollection extends BaseValidate
{
    protected $rule =[
        'ids'=> 'require|checkIDs',
    ];

    protected $message=[
        'ids'=>'ids参数必须是以逗号分隔的多个正整数'
    ];
    protected function checkIDs($value){
        $value = explode(',',$value);
        if(empty($value)){
            return false;
        }
        foreach($value as $id){
            if(!$this->isPositiveInteger($id)){
                return false;
            }
        }
        return true;
    }
}


BaseValidate.php

<?php

namespace app\api\validate;


use app\lib\exception\ParameterException;
use think\Exception;
use think\Validate;
use think\Request;

class BaseValidate extends Validate
{
    public function goCheck(){
        //获取http传入的参数
        //对这些参数做检测
        $request = Request::instance();
        $params = $request->param();

        $result = $this->batch()->check($params);
        if(!$result){
            $e = new ParameterException([
                'msg'=> $this->error,
            ]);
            throw $e;
         }else{
            return true;
        }
    }

    protected function  isPositiveInteger($value,$rule='',$data='',$field=''){
        if(is_numeric($value) && is_int($value+0) && ($value+0)>0){
            return true;
        } else{
            return false;
            //return $field.'必须是正整数';
        }
    }
}

0
0

7七月

2017-05-27

别的同学应该没这个问题,因为没有人提过。你把你现在错误的方法代码贴出来。

0
1
吃了饿饿了又吃
好.字数的限制,我写到下面.
2017-05-27
共1条回复

吃了饿饿了又吃

提问者

2017-05-27

纠正下,中间这个是没加Json()方法的。

0
0

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程