我有以下示例从Ajax调用获取XML响应并附加到表。
$("#ajaxform5").submit(function(e) {
var formURL = $(this).attr("action");
var request = $.ajax({
url : formURL,
type: "GET",
contentType : "application/xml",
headers: {
"Type" : "events"
},
success: function(xml){
$(xml).find('event').each(function(){
var $event = $(this);
var id = $event.find("id").text();
var level = $event.find("level").text();
var name = $event.find("name").text();
var attributes01 = $event.find("attributes").children("entry").eq(0).children("string").eq(0).text();
var attributes02 = $event.find("attributes").children("entry").eq(0).children("string").eq(1).text();
var attributes11 = $event.find("attributes").children("entry").eq(1).children("string").eq(0).text();
var attributes12 = $event.find("attributes").children("entry").eq(1).children("string").eq(1).text();
var attributes21 = $event.find("attributes").children("entry").eq(2).children("string").eq(0).text();
var attributes22 = $event.find("attributes").children("entry").eq(2).children("string").eq(1).text();
var attributes31 = $event.find("attributes").children("entry").eq(3).children("string").eq(0).text();
var attributes32 = $event.find("attributes").children("entry").eq(3).children("string").eq(1).text();
var attributes41 = $event.find("attributes").children("entry").eq(4).children("string").eq(0).text();
var attributes42 = $event.find("attributes").children("entry").eq(4).children("string").eq(1).text();
var userId = $event.find("userId").text();
var ipaddress = $event.find("ipaddress").text();
var outcome = $event.find("outcome").text();
var html = '<tr><td>' + id + '</td><td>' + level + '</td><td>' + name + '</td><td>' +
'<div><span class="title">' + attributes01 + '</span> <span>' + attributes02 + '</span></div>' +
'<div><span class="title">' + attributes11 + '</span> <span>' + attributes12 + '</span></div>' +
'<div><span class="title">' + attributes21 + '</span> <span>' + attributes22 + '</span></div>' +
'<div><span class="title">' + attributes31 + '</span> <span>' + attributes32 + '</span></div>' +
'<div><span class="title">' + attributes41 + '</span> <span>' + attributes42 + '</span></div>' +
'</td><td>' + userId + '</td><td>' + ipaddress + '</td><td>' + outcome + '</td></tr>';
$('#eventTable').append(html);
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
});
现在我想使用Datatables。所以我用xml2json(abdmob / x2js)将响应XML转换为JSON,我在下面得到了JSON响应。
JSON响应;
{
"list" : {
"event" : [{
"dateTime" : "1473858435162",
"nanoTime" : "438326047248251",
"id" : "15680",
"eventTime" : {
"time" : "1473851193487",
"timezone" : "Asia/Istanbul"
},
"level" : "INFORMATION",
"name" : "Get message content",
"attributes" : {
"entry" : [{
"string" : ["metaDataIds", "6"]
}, {
"string" : ["messageId", "2765"]
}, {
"string" : ["channel", "Channel[id=44ab0667-d42c-496c-bca2-2bd7eecd6dc9,name=API jQuery Direct]"]
}
],
"_class" : "linked-hash-map"
},
"outcome" : "SUCCESS",
"userId" : "1",
"ipAddress" : "127.0.0.1",
"serverId" : "f85e48e2-32b3-429f-bee5-31630d8143a2"
}, {
"dateTime" : "1473858435167",
"nanoTime" : "438326052034149",
"id" : "15679",
"eventTime" : {
"time" : "1473851191973",
"timezone" : "Asia/Istanbul"
},
"level" : "INFORMATION",
"name" : "Get messages by page limit",
"attributes" : {
"entry" : [{
"string" : ["filter", "MessageFilter[maxMessageId=2765,minMessageId=<null>,originalIdUpper=<null>,originalIdLower=<null>,importIdUpper=<null>,importIdLower=<null>,startDate=<null>,endDate=<null>,textSearch=<null>,textSearchRegex=<null>,statuses=<null>,includedMetaDataIds=[6],excludedMetaDataIds=<null>,serverId=<null>,contentSearch=[],metaDataSearch=<null>,textSearchMetaDataColumns=<null>,sendAttemptsLower=<null>,sendAttemptsUpper=<null>,attachment=false,error=false]"]
}, {
"string" : ["includeContent", "false"]
}, {
"string" : ["offset", "0"]
}, {
"string" : ["limit", "21"]
}, {
"string" : ["channel", "Channel[id=44ab0667-d42c-496c-bca2-2bd7eecd6dc9,name=API jQuery Direct]"]
}
],
"_class" : "linked-hash-map"
},
"outcome" : "SUCCESS",
"userId" : "1",
"ipAddress" : "127.0.0.1",
"serverId" : "f85e48e2-32b3-429f-bee5-31630d8143a2"
}
]
}
}
所以我的第一个问题是,这个JSON响应对DataTables有效吗?
如果它是有效的,我如何在第一个例子中将对象和数组处理为行/列?
我尝试将JSON响应插入Datatables,但我不能。你可以在图片中看到结果。
response added to rows char by char
我给出了下面的代码仅供参考,你不想知道我输入了多少数据。
我也试过了columns.data选项来读取数组但是又失败了。
$("#ajaxform6").submit(function(e) {
var formURL = $(this).attr("action");
var request = $.ajax({
url : formURL,
type: "GET",
contentType : "application/xml",
headers: {
"Type" : "events"
},
success: function(data, textStatus, jqXHR) {
var x2js = new X2JS();
var bXML = jqXHR.responseText;
var jsonObj = x2js.xml_str2json(bXML);
var json = JSON.stringify(jsonObj);
console.log(json);
$('#table_id').DataTable( {
data: json,
bSort: false,
} );
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
});
答案 0 :(得分:1)
收到您的json数据,因为响应有效,可以解析为datatable
。
您可以使用json
数据来参考我创建的以下DataTable代码:
var jsdata = {
"list" : {
"event" : [
{
"dateTime" : "1473858435162",
"nanoTime" : "438326047248251",
"id" : "15680",
"eventTime" : {
"time" : "1473851193487",
"timezone" : "Asia/Istanbul"
},
"level" : "INFORMATION",
"name" : "Get message content",
"attributes" : {
"entry" : [
{
"string" : [ "metaDataIds", "6" ]
},
{
"string" : [ "messageId", "2765" ]
},
{
"string" : [ "channel",
"Channel[id=44ab0667-d42c-496c-bca2-2bd7eecd6dc9,name=API jQuery Direct]" ]
} ],
"_class" : "linked-hash-map"
},
"outcome" : "SUCCESS",
"userId" : "1",
"ipAddress" : "127.0.0.1",
"serverId" : "f85e48e2-32b3-429f-bee5-31630d8143a2"
},
{
"dateTime" : "1473858435167",
"nanoTime" : "438326052034149",
"id" : "15679",
"eventTime" : {
"time" : "1473851191973",
"timezone" : "Asia/Istanbul"
},
"level" : "INFORMATION",
"name" : "Get messages by page limit",
"attributes" : {
"entry" : [
{
"string" : [
"filter",
"MessageFilter[maxMessageId=2765,minMessageId=<null>,originalIdUpper=<null>,originalIdLower=<null>,importIdUpper=<null>,importIdLower=<null>,startDate=<null>,endDate=<null>,textSearch=<null>,textSearchRegex=<null>,statuses=<null>,includedMetaDataIds=[6],excludedMetaDataIds=<null>,serverId=<null>,contentSearch=[],metaDataSearch=<null>,textSearchMetaDataColumns=<null>,sendAttemptsLower=<null>,sendAttemptsUpper=<null>,attachment=false,error=false]" ]
},
{
"string" : [ "includeContent", "false" ]
},
{
"string" : [ "offset", "0" ]
},
{
"string" : [ "limit", "21" ]
},
{
"string" : [ "channel",
"Channel[id=44ab0667-d42c-496c-bca2-2bd7eecd6dc9,name=API jQuery Direct]" ]
} ],
"_class" : "linked-hash-map"
},
"outcome" : "SUCCESS",
"userId" : "1",
"ipAddress" : "127.0.0.1",
"serverId" : "f85e48e2-32b3-429f-bee5-31630d8143a2"
} ]
}
};
$(document).ready(function() {
$('#table_id').DataTable({
data : jsdata.list.event,
columns : [ {
title : "Id",
data : 'id'
}, {
title : "Level",
data : 'level'
}, {
title : "Name",
data : 'name'
}, {
title : "UserId",
data : 'userId'
}, {
title : "Ip Address",
data : 'ipAddress'
}
]
});
});
&#13;
<link href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<table id="table_id" class="display" width="100%"></table>
&#13;
答案 1 :(得分:0)
JSON.stringify
columns.data
属性 2列表的示例代码如下所示。为其他列添加更多column.data
条目。
$('#table_id').DataTable( {
data: jsonObj.list.event,
columns: [
{ data: 'name' },
{ data: 'level' }
]
});