超时时jQuery AJAX调用函数

时间:2016-05-26 19:52:01

标签: javascript jquery ajax datatables

我正在尝试重新加载我的jQuery DataTables而不刷新页面以尝试捕获新数据。

这是我开始这个过程的初始就绪函数:

 $(document).ready(function()
 {
   $.ajax({
     url:'api/qnams_all.php',
     type:"GET",
     dataType:"json"
   }).done(function(response) {
       console.log(response.data);
       renderDataTable(response.data)
   }).fail(function() {
       alert( "error" );
   }).always(function() {
       alert( "complete" );
   });  
 });

我正在将数据发送到此功能:

 function renderDataTable(data)
 {
   var $dataTable = $('#example1').DataTable({
     "data": data,
     "iDisplayLength": 25,
     "order": [[ 6, "desc" ]],
     "bDestroy": true,
     "stateSave": true
     // there's some more stuff, but I don't think necessary to show
   });
 }

我正在尝试使用此处找到的答案:How to refresh table contents in div using jquery/ajax

如下:

 setTimeout(function(){
   $( "#example1" ).load( "mywebpage.php #example1" );
 }, 2000);

使用上述所有代码,首次加载页面时,它看起来像这样:

when the page first loads

但刷新后,它看起来像这样:

after refresh

上面的图片确实在没有页面刷新的情况下重新加载,但我不确定为什么它看起来像上面的图片。

2 个答案:

答案 0 :(得分:3)

我认为这个例子很有用

//Reload the table data every 30 seconds (paging reset)
var table = $('#example').DataTable( {
    ajax: "data.json"
} );

setInterval( function () {
    table.ajax.reload();
}, 30000 );

更多详情 - here

答案 1 :(得分:0)

创建一个加载/渲染数据的函数,然后在文档就绪并在2秒后调用它:

function loadAndRender()
{
    $.ajax(
    {
        url:'api/qnams_all.php',
        type:"GET",
        dataType:"json"
    }).done(function(response)
    {
        console.log(response.data);
        renderDataTable(response.data)
    }).fail(function()
    {
        alert( "error" );
    }).always(function()
    {
        alert( "complete" );
    });  

}

function renderDataTable(data)
{
    var $dataTable = $('#example1').DataTable(
    {
        "data": data,
        "iDisplayLength": 25,
        "order": [[ 6, "desc" ]],
        "bDestroy": true,
        "stateSave": true
        // there's some more stuff, but I don't think necessary to show
    });
}

$(document).ready(loadAndRender);

setTimeout(loadAndRender, 2000);