Json字符串以“\ufeff”开头导致JSON.parse报错的解决

开发过程中真是各种奇葩事情都会发生,前天给某企业修复网站BUG的时候。对方忽然说网站后台登录不上去了。

我自知在修改过程中我增加的内容都是独立写的,即使错了也不会影响原始逻辑。但毕竟问题出在我进入别人内网期间,这种事情很难说的清,只能帮他们进行分析调试。

经过一番排查之后发现后端登录接口返回了正常的JSON字符串,提示“登录成功”,但是前端的JS代码在收到JSON后并没有执行“success”的回调,而是进入了Ajax的error回调中。说实话第一次碰到这个问题,让我也感到非常好奇。于是进行了一番百度。

果不其然,百度上搜索结果都指向了后端脚本包含BOM,导致JSON字符串的开头包含了“\ufeff”字符。看来遇到此类问题的人还不少。

为了省劲,我并没有贸然去修改后端脚本的编码。仅在前端将收到的JSON字符的第一个字符截取掉之后,再进行JSON.parse()。于是后台登录成功。

为了帮助其他遇到同类问题的朋友,我也分享一个代码片段,以供参考吧。

  1. if(data.startWith("\ufeff")){
  2.         data = data.substring(1);
  3. }
  4. var res = JSON.parse(data);

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!