甩标准
这个问题从标准层面来讲,是因为这样符合规范。
前端请求接口,后端直接给个字符串或者数字这合适么……转态码也没有,message也没有,让前端怎么判断,怎么输出错误信息?
至少格式也得是:
{
data: xxx,
code: 200 ,
msg: 'success'
}
这种格式吧?
上源码
从代码角度讲就直接上angularjs源码了——
拿这个举例(备注:看到data = true了吧?这个接口就是之前后台直接传了true给我,虽然没报错但是拿不到这个布尔值,我debug的时候截的图)。
angular.js 这个文件里的这个方法:defaultHttpResponseTransform,就是处理后台返回的结果的。
看到我断点的那行了吧?tempData就是后台的返回值。然后要调用fromJson这个方法来处理一下。下面接着看这个方法都干啥了——
先判断是不是字符串,如果是的话就转为json。
因为这里默认后台按照标准的规范来传。一个json对象里有data有msg有code的那种。就算没有,也至少是个对象。所以这里传进来的是JSON.stringify过的json对象。肯定是字符串了,调用JSON.parse后再返回,前端就能拿到response.id这样的值了。
但是,如果是后台只传了true,也能被JSON.parse,所以不会报错。但如果后台返回的结果是普通字符串比如'aabgd',这里就会报错了。
报错信息如下: Unexpected token a in JSON at position 0
我忘截图了。
验证一下——
如果后台直接返回了数组,那么接口那里写上:isArray : true就行。比如这样——
霸气点
所以!以后再有后台的人返回接口数据直接给字符串或者布尔值,前端拿不到的时候,不用畏畏缩缩的求后台改成map,直接把这篇文章甩给他!
不仅不规范,框架自己还做了校验。我为了你一个不规范的接口我去改源码吗?!
不服你来打我呀?有意见找领导,让我们换框架、升级重构产品呀~~