JSON.parse解析特殊字符报错解决方案

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

具体案例:

页面点击”下一任务”

会去请求后台,这里出现的问题是有虚拟任务的时候。然后会返回一个map,也就是如下图中回调函数中的data。

当该map里存有以下字符的时候:

\t

\n

\r

$nbsp;

等等…特殊字符的时候!传到页面上,

在IE11浏览器里使用JSON.parse去解析该json字符串,会报错。

IE8不会报。

JSON.parse解析特殊字符报错解决方案_第1张图片

如图,使用$http请求的时候用的就是angularJS的ajax请求。当后台处理完返回一个JSON字符串的时候,调success回调函数。该json字符串假如包含了以上说的特殊字符,则会报错。

咱们pad-pac的all.js其实是包含了angularJS和jquery两个框架。

通过找源码,发现最终调用的是JSON.parse()。这里统一做了一个处理!

在common.js文件中了如下方法。

JSON.parse解析特殊字符报错解决方案_第2张图片

然后在all.js里调用一下。问题解决。

 

PS:

在解决该问题的时候,在java代码那里直接去掉特殊字符也能解决,不好的地方则是只改了一处,下次再出现,需要重新改!

如下:

JSON.parse解析特殊字符报错解决方案_第3张图片

或者直接把all.js里的JSON.parse换一个函数!用eval函数也可以!

Eval函数存在一定的风险!因为不管是js对象,还是数组字符对象。还是json字符,甚至是直接扔一个函数进去它都会解析!相当于万能的!怕注入问题。所以也没采用该解决方案。

主要涉及参考文件:

extra.jsp   showTask(count)

com.paic.nets.tmr.pub.task.web.controller.GetNextTask.getTask()

businessMain.js  $scope.getTask

all.js

common.js

 

有虚拟任务的时候

com.paic.nets.tmr.pub.notice.web.controller.VirtualTaskController.tsrVirtualTask(HttpServletRequest, HttpServletResponse, Object)

转载于:https://my.oschina.net/u/2436852/blog/833558

你可能感兴趣的:(JSON.parse解析特殊字符报错解决方案)