2016-10-01 59 views
2
<!DOCTYPE html> 
<html> 
<head> 
    <title>WeekAPI</title> 
    <meta charset="utf-8"> 
</head> 
<body> 
    Tag Value from Variable 
    <h1 id="txtDisplay">Please Wait..</h1> 

    Tag Value from API 
    <h1 id="txtResponse">Please Wait..<h1> 

    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 

    <script> 

     var tag_value = "\uD83D\uDE05\uD83D\uDE00\uD83D\uDE02\uD83D\uDE2C\uD83D\uDE10\uD83D\uDE0E"; 

     $("#txtDisplay").html(tag_value); 


     var api = "http://week.esy.es/api?id=140393107018&institute=039&branch=07&semester=7&callback=?"; 

     $.getJSON(api, function(data) { 
      //response tag value is same as tag_value variable 
      $("#txtResponse").html(data.schedule.friday[0].tag); 
     }); 
    </script> 
</body> 
</html> 

API響應數據無法從Unicode JSON響應顯示錶情符號

{ 
    "ok": true, 
    "message": "Successful.", 
    "schedule": { 
    "monday": [ 
     { 
     "type": "lecture", 
     "_id": 2, 
     "start": "11:32 AM", 
     "end": "11:32 AM", 
     "teacher": "KPP", 
     "subject": "Compiler Design", 
     "tag": "" 
     } 
    ], 
    "tuesday": [], 
    "wednesday": [], 
    "thursday": [], 
    "friday": [ 
     { 
     "type": "holiday", 
     "_id": 2, 
     "start": "09:30 AM", 
     "end": "10:21 AM", 
     "name": "\\u0928\\u0935\\u0930\\u093E\\u0924\\u094D\\u0930\\u093F", 
     "tag": "\\uD83D\\uDE05\\uD83D\\uDE00\\uD83D\\uDE02\\uD83D\\uDE2C\\uD83D\\uDE10\\uD83D\\uDE0E" 
     } 
    ], 
    "saturday": [], 
    "sunday": [] 
    } 
} 

WeekAPI output

第一場景存儲到tag_value可變

表情符號的

Unicode值

在txtDisplay部分使用$("#txtDisplay").html(tag_value);進行顯示。

工作正常

但當

第二場景 檢索來自API標籤值(值同上)在txtResponse部分使用$("#txtResponse").html(data.schedule.friday[0].tag);

顯示。

它無法顯示錶情符號。它是顯示文字,而不是。

+0

你能不能更新完整的json示例文章 – Aravind

+0

文章更新:) – asissuthar

+1

問題出在服務器端,它實際上是用字母'u'和反斜槓返回字符串。試圖在JS消費者身上取消擴張可能會很脆弱(尤其是使用糟糕的eval)。這在源頭上得到了更好的解決。 – bobince

回答

1

瞭解了javascript的內部工作後得到了解決方案。

javascript只在unicode字符串在引號之間硬編碼時解釋unicode。

所以我用eval功能和創建下面的代碼片段來解釋unicode數據運行時。

function interpret(s) { 
    return eval("(function(){ return '" + s + "'})()"); 
} 

$.getJSON(api, function(data) { 
    $("#txtResponse").html(interpret(data.schedule.friday[0].tag)); 
}); 

找到另一種解決方案

在服務器側進行打印響應於與\在JSON

$response = json_encode($result); 

echo str_replace('\\\\' , '\\' , $response); 

在客戶端替換\\之前剛剛添加str_replace功能

$.getJSON(api, function(data) { 
    $("#txtResponse").html(data.schedule.friday[0].tag); 
});