JSON.parse解析特殊字符報錯解決方案

具體案例: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)

相關文章
相關標籤/搜索