2016-07-27 68 views
1

我試圖避免通過使用.ajax.params()獲取最後一組ajax參數並從我的第一個調用返回表數據來進行兩個ajax調用。手動加載更新數據表數據,而無需調用AJAX

然後我在我自己的JSON傳遞到數據表下面這個模式

datatable.clear(); 
datatable.rows.add(newDataArray); 
datatable.draw(); 

從這個question

但是我的表有ajax集合,所以當draw()被調用時,另一個ajax調用被觸發,這個調用打破了我自己傳遞數據的要點。我需要的是一種在重繪表格時抑制ajax調用的方法。

另一種方法是編寫我自己的ajax處理並手動將數據添加到數據表中,但是我認爲我也必須自己創建ajax參數,這將是一個痛苦。

+0

結合你想有一個Ajax源表,但隨後行手動加載到它爲什麼要做?爲什麼不堅持一種方法或另一種? –

+0

當某些事件發生時,我會進行ajax調用來更新服務器端的數據,有時這些會更改表中的數據。目前,當這個Ajax調用返回它然後告訴數據表重繪,但是這使用另一個我想避免的Ajax調用。 – edlouth

+0

也許我這樣做是錯誤的方式,而不是從另一個Ajax調用加載數據我可以改變table.ajax.url datatables調用,並添加額外的參數使用ajax.data(不知道如何設置初始化後) 。接下來的問題就是如何取消基於返回的json的重繪。 – edlouth

回答

0

我已經創建了下面的數據表插件,它可以使用一次性的自定義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); 
相關問題