关于javascript:angularjs调后台接口为啥返回结果必须是json

58次阅读

共计 821 个字符,预计需要花费 3 分钟才能阅读完成。

甩规范

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

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

不仅不标准,框架本人还做了校验。我为了你一个不标准的接口我去改源码吗?!

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

正文完
 0