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

具体案例:

页面点击”下一任务”

会去请求后台,这里出现的问题是有虚拟任务的时候。然后会返回一个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)

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值