如何从ajax调用加载完整的数据表?

时间:2014-01-16 20:05:40

标签: java jquery ajax jsp datatables

我正在尝试使用列标题及其正文填充表格,但是如果它无法进行ajax调用。

<table id="datatable1" cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
    <thead>
    </thead>
    <tbody>
    </tbody>
</table>

我让头部和身体都空着。 但是添加一些随机标题。

<thead>
    <tr>
      <th>Random column title</th>
    </tr>
</thead>

修复它。虽然我的意思是从JSON字符串同时添加列名和数据并将其添加到表中但它不会让我:

如果事先建立了正确的aoColumnsmData,我也可以从数据库加载资料没问题。

var oTable; //datatable reference
var start = 0; //first row's id to load
var qty = 100; //number of rows to load
var DESC = "false"; //load last row first and go down?
var type = "something";
var ajaxURL = GLOBAL_ROUTE + "api/application/datatable/fillTable/" + type + "/" + start + "/" + qty + "/" + DESC;

oTable = $('#datatable1').dataTable({
"sPaginationType" : "full_numbers",
"sDom" : '<"top"<"length"l><"search"f><"position">>rt<"bottom"<"info"i><"pages"p>>',
"bProcessing" : false,
"bServerSide" : false,
"sAjaxSource" : ajaxURL,
"bDeferRender" : true,
/*"aoColumns" : [ {
"mData" : "a"
}, {
"mData" : "b"
}, {
"mData" : "c"
}, {
"mData" : "d"
} ]*/
});
alert("asasd"); //this alert is not even reached if no header/body/aoColumns are set.

没有预先使用列名进行ajax调用吗?

2 个答案:

答案 0 :(得分:0)

Nvm,我找到了方法,我将与你分享!

我所要做的就是改变我进行ajax调用的方式。而不是使用数据表&#34; sAjaxSource&#34;这样做的参数,我做了我自己的jquery $ .ajax()调用,通过json加载绝对一切。

首先我更改了js代码:

$.ajax({
"url" : ajaxURL,
"success" : function(json) {
    json.bDestroy = true;
    json.sPaginationType = "full_numbers";
    json.sDom = '<"top"<"length"l><"search"f><"position">>rt<"bottom"<"info"i><"pages"p>>';
    oTable = $('#datatable1').dataTable(json);
},
"dataType" : "json"
});

然后我不得不对数据表对象进行一些更改。 这是java代码:

import java.util.List;

public class DataTableObject {

String sPaginationType = "";
String sDom = "";
boolean bProcessing = false;
boolean bServerSide = false;
String sEcho;
int iTotalRecords;
private List<Object> aoColumns;
List<Object> aaData;

public String getsPaginationType() {
    return sPaginationType;
}

public void setsPaginationType(String sPaginationType) {
    this.sPaginationType = sPaginationType;
}

public String getsDom() {
    return sDom;
}

public void setsDom(String sDom) {
    this.sDom = sDom;
}

public boolean isbProcessing() {
    return bProcessing;
}

public void setbProcessing(boolean bProcessing) {
    this.bProcessing = bProcessing;
}

public boolean isbServerSide() {
    return bServerSide;
}

public void setbServerSide(boolean bServerSide) {
    this.bServerSide = bServerSide;
}

public int getiTotalRecords() {
    return iTotalRecords;
}

public void setiTotalRecords(int iTotalRecords) {
    this.iTotalRecords = iTotalRecords;
}

public String getsEcho() {
    return sEcho;
}

public void setsEcho(String sEcho) {
    this.sEcho = sEcho;
}

public List<Object> getAaData() {
    return aaData;
}

public void setAaData(List<Object> aaData) {
    this.aaData = aaData;
}

public List<Object> getAoColumns() {
    return aoColumns;
}

public void setAoColumns(List<Object> aoColumns) {
    this.aoColumns = aoColumns;
}
}

所以是的,显然我不得不在外面进行ajax呼叫,但不是两个,因为我认为最终可能要做。 希望这对未来的某些人有所帮助:)

K,回去工作。

答案 1 :(得分:0)

由于您在后端使用Java,而不是使用变通方法,您可能需要考虑JED网站上提供的许多示例,这些示例演示了如何在Java平台上最好地使用DataTables。查看:http://jed-datatables.net