angularjs调后台接口,为啥返回结果必须是json?

甩标准

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

前端请求接口,后端直接给个字符串或者数字这合适么……转态码也没有,message也没有,让前端怎么判断,怎么输出错误信息?

至少格式也得是:

{
    data: xxx,
    code: 200 ,
    msg: 'success'
}

这种格式吧?

上源码

从代码角度讲就直接上angularjs源码了——

angularjs调后台接口,为啥返回结果必须是json?_第1张图片

拿这个举例(备注:看到data = true了吧?这个接口就是之前后台直接传了true给我,虽然没报错但是拿不到这个布尔值,我debug的时候截的图)。

angular.js 这个文件里的这个方法:defaultHttpResponseTransform,就是处理后台返回的结果的。

看到我断点的那行了吧?tempData就是后台的返回值。然后要调用fromJson这个方法来处理一下。下面接着看这个方法都干啥了——

angularjs调后台接口,为啥返回结果必须是json?_第2张图片

先判断是不是字符串,如果是的话就转为json。

因为这里默认后台按照标准的规范来传。一个json对象里有data有msg有code的那种。就算没有,也至少是个对象。所以这里传进来的是JSON.stringify过的json对象。肯定是字符串了,调用JSON.parse后再返回,前端就能拿到response.id这样的值了。

但是,如果是后台只传了true,也能被JSON.parse,所以不会报错。但如果后台返回的结果是普通字符串比如'aabgd',这里就会报错了。

报错信息如下:
Unexpected token a in JSON at position 0

我忘截图了。

验证一下——

angularjs调后台接口,为啥返回结果必须是json?_第3张图片

如果后台直接返回了数组,那么接口那里写上:isArray : true就行。比如这样——

angularjs调后台接口,为啥返回结果必须是json?_第4张图片

所以!以后再有后台的人返回接口数据直接给字符串或者布尔值,前端拿不到的时候,不用畏畏缩缩的求后台改成map,直接把这篇文章甩给他!

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

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

你可能感兴趣的:(javascript,angularjs)