18910140161

angularjs调整背景界面 为什么返回的结果必须是json?

顺晟科技

2021-07-09 10:32:13

83

甩标准

这个问题从标准层面来讲,是因为这样符合规范。

前端请求接口,后端直接给个字符串或者数字这合适么……转态码也没有,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,直接把这篇文章甩给他!

不仅不规范,框架自己还做了校验。我为了你一个不规范的接口我去改源码吗?!

不服你来打我呀?有意见找领导,让我们换框架、升级重构产品呀~~

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航