2016-08-24 19 views
1

如何使用函数作为带数据表的ajax的数据源?我使用它与一个内置的数据库,在那里我打电话的功能,结果写入data.json文件,然后使用文件作为源电子应用:jQuery Datatables使用函数作为ajax数据源而不是路径或URL

populateData(); //gets data from db and writes output to data.json 

let table = $('#accTransaction').DataTable({ 
     dom: 'Bfrtip', 
     select: { 
     style: 'single' 
     }, 
     ajax: '../data.json', 
     ... 

相反,它会更有效率,如果我可以直接调用数据库函数,但它不工作....无效的网址。

let table = $('#accTransaction').DataTable({ 
     dom: 'Bfrtip', 
     select: { 
     style: 'single' 
     }, 
     ajax: getData(), 
     ... 

我意识到我可以让源“数据:newData,”但后来我松散的ablility调用table.ajax.reload

setInterval(function() { 
    table.ajax.reload(null, false); // user paging is not reset on reload 
    console.log('reloading..') 
}, 3000); 

如何使用作为数据源Ajax和数据表,而不是的网址或文件路径?

+0

你确定你使用的是[jQuery的数据表(https://datatables.net/)?如果不是 - 您使用哪个插件? – Dekel

+0

也许你可以在'ajax'选项的'data'参数中使用函数! –

+0

@Dekel,您可以通过https://datatables.net/download/查看下载构建器,以查看大量插件。 ajax:内置。请看这里https://datatables.net/examples/data_sources/ajax.html – jtlindsey

回答

1

不知道,如果它是任何价值,但你可以换Ajax调用自己变成一个函数,该函数使用destroy标志重新初始化表。从下面的演示:

function reload(url) { 
    $.ajax({ 
    url: url, 
    type: 'get', 
    dataType: 'json' 
    }) 
    .done(function(json) { 
    console.log(json) //check the reponse 
    return $('#example').DataTable({ 
     destroy: true, 
     data : json.data, 
     columns: [ 
      { data: 'name', title: 'Name' }, 
      { data: 'position', title: 'Position' } 
     ] 
    }) 
    }) 
} 

如果你现在刷新DataTable中简单地通过

reload('url/to/json') 

在这里您可以更改URL到任何东西,只记得适当地改变columns定义(或动态构建它) 。它可以使用间隔来完成:

setInterval(function() { 
    reload('https://api.myjson.com/bins/38p4r') 
}, 1000) 

演示 - >http://jsfiddle.net/zefL681c/

+0

嘿大卫,谢谢你的选择。问题是我使用'table.ajax.relaod()',所以我不必在数据更新时重建表和松散分页https://datatables.net/reference/api/ajax.reload() 。所以我试图找到一种方法来提供返回json的非ajax函数('ajax:getData()'),而不是向包含json的文件提供url。我只是建立一个文件('data.json'),所以我可以使用ajax表重新加载功能,并保留它带来的好处。 – jtlindsey

+1

@jtlindsey,是的,我明白这一点。问题是ajax属性不支持promise。如果这样做很容易,但是现在我们有一个场景,其中dataTable不在等待数据获取方法在尝试访问数据之前完成,所以需要另一种方法。实际上,我相信一个简单的'stateSave:true'可以解决这个问题,它可以在重新初始化时保存设置并销毁并重新加载。 – davidkonrad

+1

谢谢。我不知道状态保存功能 – jtlindsey

相关问题