2016-07-05 82 views
1

我使用的$http.get()做GET請求時,響應於JSON,但與HTML編碼某些字符,一個例子是如下面「,編碼有"的SyntaxError:意外的令牌在JSON

{ 
    "description":"invalid", 
    "errorCode":"error.loginInvalid" 
} 

而且我使用$httpProvider.interceptors.push('httpErrorsInterceptor');,httpErrorsInterceptor將顯示在responseError錯誤的信息。因爲響應JSON不正確解碼,當嘗試處理它,它會顯示在控制檯SyntaxError: Unexpected token & in JSON。我不知道我們如何可以解碼響應JSON何時處理?在$httpProvider

+0

你控制源?如果是這樣的話......首先如何獲得這種方式?這是無效的json – charlietfl

+0

@charlietfl是的,它是JSON,但是一些特殊字符被編碼。 – chancyWu

+0

那麼,爲什麼不去除額外的編碼呢? (特別是它沒有意義) – zerkms

回答

0

將html實體轉換爲文本的一種方法是創建一個dom元素,將該字符串注入爲html並將其恢復爲文本。 DOM解析器會比寫轉換的更好的工作,自己的

var str='{ "description":"invalid", "errorCode":"error.loginInvalid&quot"}' 
var JSON = angular.element('<div>').html(str).text(); 

但示例所示仍然是無效的JSON由於在最後一個值

working demo with last &quot removed

+0

對不起,我刪除了最後一個值的額外報價〜 – chancyWu

+0

好吧,如果這消失了,這應該工作...只是JSON.parse()的結果。仍然沒有理由的xml轉換器應該這樣做 – charlietfl

+0

是的,但它超出了我的控制範圍〜 – chancyWu

0

響應的內容類型是text/html;charset=UTF-8額外的報價,但angularjs將解析爲JSON,因爲它始於{並以}結尾,而內容則編碼爲HTML,因此解析器遇到&字符時將顯示語法錯誤。

一種解決方案是提供transformResponse$http.config,這是如下的內容:

$http({ 
    method: 'get', 
    url: yourURL, 
    transformResponse: transformResponse 
}); 

function transformResponse(data) { 
    var json = angular.element('<div>').html(data).text(); 
    return JSON.parse(json); 
} 

如果你想改變所有的響應,您可以添加到transformResponse$httpProvider.defaults.transformResponse