Jquery 数据表fnDraw';行不通
我使用的是datatables,它从json文件中获取数据Jquery 数据表fnDraw';行不通,jquery,json,datatables,Jquery,Json,Datatables,我使用的是datatables,它从json文件中获取数据 var date=new Date(); var day=date.getDate(); var dataTable = $('#.main_content table').dataTable({ "bProcessing": true, "bPaginate": false, "bSort": false,
var date=new Date();
var day=date.getDate();
var dataTable = $('#.main_content table').dataTable({
"bProcessing": true,
"bPaginate": false,
"bSort": false,
"bServerSide": true,
"bjQueryUI": true,
"sAjaxSource": 'sources/data.json',
"fnServerData": fnServerObjectToArray()
});
fnServerObjectToArray = function () {
return function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "GET",
"url": sSource,
"data": aoData,
"dataType": "json",
"success": function (json) {
var a = [];
var data = json.aoData;
for (var i = 0, iLen = data.appointments.length; i < iLen; i++) {
var inner = [];
inner.push(data.appointments[i].time);
if (data.appointments[i].CHT111[day]) {
inner.push(data.appointments[i].CHT111[day]);
inner.push(data.appointments[i].DOB[day]);
inner.push(data.appointments[i].Patient[day]);
inner.push(data.appointments[i].Visit_Reason[day]);
inner.push(data.appointments[i].Room[day]);
inner.push(data.appointments[i].Scheduled[day]);
}
else {
inner.push(data.appointments[i].CHT111.default);
inner.push(data.appointments[i].DOB.default);
inner.push(data.appointments[i].Patient.default);
inner.push(data.appointments[i].Visit_Reason.default);
inner.push(data.appointments[i].Room.default);
inner.push(data.appointments[i].Scheduled.default);
}
a.push(inner);
}
json.aaData = a;
fnCallback(json);
}
});
}
}
如您所见,我正在使用一个函数从json文件中提取数据
var date=new Date();
var day=date.getDate();
var dataTable = $('#.main_content table').dataTable({
"bProcessing": true,
"bPaginate": false,
"bSort": false,
"bServerSide": true,
"bjQueryUI": true,
"sAjaxSource": 'sources/data.json',
"fnServerData": fnServerObjectToArray()
});
fnServerObjectToArray = function () {
return function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "GET",
"url": sSource,
"data": aoData,
"dataType": "json",
"success": function (json) {
var a = [];
var data = json.aoData;
for (var i = 0, iLen = data.appointments.length; i < iLen; i++) {
var inner = [];
inner.push(data.appointments[i].time);
if (data.appointments[i].CHT111[day]) {
inner.push(data.appointments[i].CHT111[day]);
inner.push(data.appointments[i].DOB[day]);
inner.push(data.appointments[i].Patient[day]);
inner.push(data.appointments[i].Visit_Reason[day]);
inner.push(data.appointments[i].Room[day]);
inner.push(data.appointments[i].Scheduled[day]);
}
else {
inner.push(data.appointments[i].CHT111.default);
inner.push(data.appointments[i].DOB.default);
inner.push(data.appointments[i].Patient.default);
inner.push(data.appointments[i].Visit_Reason.default);
inner.push(data.appointments[i].Room.default);
inner.push(data.appointments[i].Scheduled.default);
}
a.push(inner);
}
json.aaData = a;
fnCallback(json);
}
});
}
}
fnServerObjectToArray=函数(){
返回函数(sSource、aoData、fnCallback){
$.ajax({
“数据类型”:“json”,
“类型”:“获取”,
“url”:sSource,
“数据”:aoData,
“数据类型”:“json”,
“成功”:函数(json){
var a=[];
var data=json.aoData;
对于(var i=0,iLen=data.appoinces.length;i
问题是,我有一个按钮,可以更改day变量,然后调用fnDraw()方法,但该方法不起作用。根据datatables文档,fnDraw不会重新加载Ajax数据。然而,有一个名为fnReloadAjax的插件,它将完全满足您的需求。以下代码是插件代码,只需将其另存为js文件,并在加载datatables js之后、初始化表之前加载:
$.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource, fnCallback, bStandingRedraw )
{
if ( typeof sNewSource != 'undefined' && sNewSource != null )
{
oSettings.sAjaxSource = sNewSource;
}
this.oApi._fnProcessingDisplay( oSettings, true );
var that = this;
var iStart = oSettings._iDisplayStart;
var aData = [];
this.oApi._fnServerParams( oSettings, aData );
oSettings.fnServerData( oSettings.sAjaxSource, aData, function(json) {
/* Clear the old information from the table */
that.oApi._fnClearTable( oSettings );
/* Got the data - add it to the table */
var aData = (oSettings.sAjaxDataProp !== "") ?
that.oApi._fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ) : json;
for ( var i=0 ; i<aData.length ; i++ )
{
that.oApi._fnAddData( oSettings, aData[i] );
}
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
that.fnDraw();
if ( typeof bStandingRedraw != 'undefined' && bStandingRedraw === true )
{
oSettings._iDisplayStart = iStart;
that.fnDraw( false );
}
that.oApi._fnProcessingDisplay( oSettings, false );
/* Callback user function - for event handlers etc */
if ( typeof fnCallback == 'function' && fnCallback != null )
{
fnCallback( oSettings );
}
}, oSettings );
};
你怎么称呼fnDraw?有代码段吗?$(“按钮”)。单击(function(){dataTable.fnDraw();})它仍然不起作用。数据表没有被重绘,而且此函数还请求文件twiceOk!我发现了什么不起作用。ReloadAjax()函数不适用于上的服务器端处理。