我的JSON数据是:
[
{
"serviceName":"test",
"requestXML":"<soapenvelope><uname>testuser</uname></soapenvelope>"
},
{
"serviceName":"test2",
"requestXML":"<soapenvelope><uname>testuser2</uname></soapenvelope>"
}
]
调用后端的jQuery代码,返回此JSON数据
var postRequest = $.post(url);
postRequest.done(function( data ) {
$('#tableid').dataTable( {
"processing": true,
destroy: true,
"aaData": data,
"aoColumns": [
{ "data": "serviceName" },
{ "data": "requestXML" },
]
});
});
现在,当它在屏幕上显示为jQuery DataTable时,我希望将整个XML打印出来。但它只打印testuser
而不是整个XML。
有人可以帮我解决这个问题吗?
我已经验证了我的JSON数据正确无误。
答案 0 :(得分:3)
<强>解强>
您可以使用$('<div/>').text(data).html()
技巧对HTML实体进行编码。
例如:
$('#tableid').dataTable({
"processing": true,
"destroy": true,
"data": data,
"columns": [
{
"data": "serviceName"
},
{
"data": "requestXML",
"render": function(data, type, full, meta){
return $('<div/>').text(data).html();
}
}
]
});
<强>样本强>
请参阅this jsFiddle以获取代码和演示。
答案 1 :(得分:0)
您的服务器应该处理它发送的响应。而不是发送
[
{"serviceName":"test","requestXML":"<soapenvelope><uname>testuser</uname></soapenvelope>"},
{"serviceName":"test2","requestXML":"<soapenvelope><uname>testuser2</uname></soapenvelope>"}
]
它应该发送类似下面的内容
[
{"serviceName":"test","requestXML":"<soapenvelope><uname>testuser</uname></soapenvelope>"},
{"serviceName":"test2","requestXML":"<soapenvelope><uname>testuser2</uname></soapenvelope>"}
]
如果无法做到(您无法控制服务器),则以下链接应该有所帮助 Escape markup in JSON-driven jQuery datatable?
答案 2 :(得分:0)
首先,您需要XML转义函数(取自here):
var XML_CHAR_MAP = {
'<': '<',
'>': '>',
'&': '&',
'"': '"',
"'": '''
}
function escapeXml (s) {
return s.replace(/[<>&"']/g, function (ch) {
return XML_CHAR_MAP[ch]
})
}
然后您可以使用它来渲染单元格内容:
{
data: "requestXML",
render: function(data, method, object, pos) {
return '<pre>' + escapeXml(data) + '</pre>'
}
}
现在您的XML应该可见。如果不需要,请删除pre
标记。