开发过程中真是各种奇葩事情都会发生,前天给某企业修复网站BUG的时候。对方忽然说网站后台登录不上去了。
我自知在修改过程中我增加的内容都是独立写的,即使错了也不会影响原始逻辑。但毕竟问题出在我进入别人内网期间,这种事情很难说的清,只能帮他们进行分析调试。
经过一番排查之后发现后端登录接口返回了正常的JSON字符串,提示“登录成功”,但是前端的JS代码在收到JSON后并没有执行“success”的回调,而是进入了Ajax的error回调中。说实话第一次碰到这个问题,让我也感到非常好奇。于是进行了一番百度。
果不其然,百度上搜索结果都指向了后端脚本包含BOM,导致JSON字符串的开头包含了“\ufeff”字符。看来遇到此类问题的人还不少。
为了省劲,我并没有贸然去修改后端脚本的编码。仅在前端将收到的JSON字符的第一个字符截取掉之后,再进行JSON.parse()。于是后台登录成功。
为了帮助其他遇到同类问题的朋友,我也分享一个代码片段,以供参考吧。
- if(data.startWith("\ufeff")){
- data = data.substring(1);
- }
- var res = JSON.parse(data);