我正在使用this blog post as a guide,详细说明了如何将jQuery与jTemplates一起使用来将JSON响应填充到模板中。
我的问题是,其中一个返回的字段(名为Description)包含HTML,但HTML括号被编码为\ u003C和\ u003e。
这是服务器返回的HTML(在Description字段中):
<a href="/en/Yokota/User/Show/Chad">Chad</a> updated their ad, <a href="/en/Yokota/Ad/Show/100">Validation Test Ad Again</a>, @<a href="/en/Yokota">Yokota</a>
这是JSON响应的样子:
[{"TypeOfActivity":"0","Description":"\u003ca href=\"/en/Yokota/User/Show/YokotaTour\"\u003eYokotaTour\u003c/a\u003e posted \u003ca href=\"/en/Yokota/Ad/Show/166\"\u003eOne of the best for sure\u003c/a\u003e for sale @\u003ca href=\"/en/Yokota\"\u003eYokota\u003c/a\u003e","DateHappened":"6/23/2010 12:26:55 AM"}]
注意“\ u003c”或“\ u003e”。那些看起来像unicode逃脱,但为什么会发生这种情况?这是调用JSON响应的jQuery:
$.getJSON("<%= Url.Action("List", "Activity") %>",
function(data){
$("#aLog").setTemplate($("#templateHolder").html());
$("#aLog").processTemplate(data);
});
更新
当页面加载完成时,这就是源代码的样子(在Firefox中查看&gt;页面源代码):
<a href="/en/Yokota/User/Show/Chad">Chad</a> updated their ad, <a href="/en/Yokota/Ad/Show/100">Validation Test Ad Again</a>, @<a href="/en/Yokota">Yokota</a>
也许是因为它已接近凌晨3点了,但我很难过......非常感谢任何帮助 - 谢谢!
更新2
public JsonResult List()
{
IList<ActivityContract> contracts = new List<ActivityContract>();
var activityList = _db.Activity.ByBaseID(CurrentBase.BaseID).OrderByDescending(a => a.DateHappened);
foreach (var a in activityList) {
contracts.Add(new ActivityContract { TypeOfActivity = a.TypeOfActivity.ToString(), Description = a.Description, DateHappened = a.DateHappened.ToString() });
}
return Json(contracts, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:3)
事实证明,问题在于jTemplates中的设置。 setTemplate行必须是这样的:
$("#aLog").setTemplate($("#templateHolder").html(), [], {filter_data: false});
特别是,filter_data必须设置为false。默认情况下,jTemplates html编码。 ;(
答案 1 :(得分:0)
在示例中使用utf8中的“contentType”进行类似的检查 your example
$.ajax({
type:"GET",
url: "<%= Url.Action("List", "Activity") %>",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
$("#aLog").setTemplate($("#templateHolder").html());
$("#aLog").processTemplate(data);
}
});
});
答案 2 :(得分:0)
JSONSerializer会自动转义“&lt;”和“&gt;”具有unicode转义序列的字符。
jQuery应该能够正常解析这些。你正在使用$ .getJSON方法,我认为它会自动将响应评估为json和unescape它,所以我有点难以理解为什么最终输出仍然包含转义码。
如果你这样做:
$("#aLog").processTemplate(eval("(" + data+ ")"));
是否解决了这个问题?