具體案例:java
頁面點擊」下一任務」jquery
會去請求後臺,這裏出現的問題是有虛擬任務的時候。而後會返回一個map,也就是以下圖中回調函數中的data。web
當該map裏存有如下字符的時候:ajax
\tjson
\n數組
\r瀏覽器
$nbsp;框架
等等…特殊字符的時候!傳到頁面上,jsp
在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)