我已經創建了下面的數據表插件,它可以使用一次性的自定義ajax設置進行ajax加載。
var __reload = function (settings, holdPosition, callback) {
// Use the draw event to trigger a callback
if (callback) {
var api = new _Api(settings);
api.one('draw', function() {
callback(api.ajax.json());
});
}
if (settings.oApi._fnDataSource(settings) == 'ssp') {
settings.oApi._fnReDraw(settings, holdPosition);
}
else {
settings.oApi._fnProcessingDisplay(settings, true);
// Cancel an existing request
var xhr = settings.jqXHR;
if (xhr && xhr.readyState !== 4) {
xhr.abort();
}
// Trigger xhr
settings.oApi._fnBuildAjax(settings, [], function(json) {
settings.oApi._fnClearTable(settings);
var data = settings.oApi._fnAjaxDataSrc(settings, json);
for (var i=0, ien=data.length ; i<ien ; i++) {
settings.oApi._fnAddData(settings, data[i]);
}
settings.oApi._fnReDraw(settings, holdPosition);
settings.oApi._fnProcessingDisplay(settings, false);
});
}
};
jQuery.fn.dataTable.Api.register('ajax.loadOnce()', function (ajax, callback, resetPaging) {
return this.iterator('table', function (ctx) {
store = ctx.ajax;
ctx.ajax = ajax;
__reload(ctx, resetPaging===false, callback);
ctx.ajax = store;
});
});
這使得可以將參數數據表自定義數據和一個新的URL這樣
ajax = {
url: url,
data: function (d){
d.value = value;
}
};
table.ajax.loadOnce(ajax);
結合你想有一個Ajax源表,但隨後行手動加載到它爲什麼要做?爲什麼不堅持一種方法或另一種? –
當某些事件發生時,我會進行ajax調用來更新服務器端的數據,有時這些會更改表中的數據。目前,當這個Ajax調用返回它然後告訴數據表重繪,但是這使用另一個我想避免的Ajax調用。 – edlouth
也許我這樣做是錯誤的方式,而不是從另一個Ajax調用加載數據我可以改變table.ajax.url datatables調用,並添加額外的參數使用ajax.data(不知道如何設置初始化後) 。接下來的問題就是如何取消基於返回的json的重繪。 – edlouth