2019独角兽企业重金招聘Python工程师标准>>>
具体案例:
页面点击”下一任务”
会去请求后台,这里出现的问题是有虚拟任务的时候。然后会返回一个map,也就是如下图中回调函数中的data。
当该map里存有以下字符的时候:
\t
\n
\r
$nbsp;
等等…特殊字符的时候!传到页面上,
在IE11浏览器里使用JSON.parse去解析该json字符串,会报错。
IE8不会报。
如图,使用$http请求的时候用的就是angularJS的ajax请求。当后台处理完返回一个JSON字符串的时候,调success回调函数。该json字符串假如包含了以上说的特殊字符,则会报错。
咱们pad-pac的all.js其实是包含了angularJS和jquery两个框架。
通过找源码,发现最终调用的是JSON.parse()。这里统一做了一个处理!
在common.js文件中加了如下方法。
然后在all.js里调用一下。问题解决。
PS:
在解决该问题的时候,在java代码那里直接去掉特殊字符也能解决,不好的地方则是只改了一处,下次再出现,需要重新改!
如下:
或者直接把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)