jQuery ajax datatable显示旧数据几秒钟?

时间:2016-04-25 12:23:42

标签: php jquery ajax datatables

我正在使用jQuery Datatable来显示数据库中的数据。我正在使用ajax来获取数据。所以情况就像我有引导选项卡。因此,当用户单击任何选项卡时,它将显示与选项卡对应的数据。所以我的jQuery代码就像这样

$('a.communication-data[data-toggle="tab"]').on('click', function(e) {
    $('#get_communication').dataTable().fnDestroy();    
    var proj_id = $('input#user_project_id').val();
    var communicationTable = $('#get_communication').dataTable();
    $('#get_communication').dataTable({
        "processing": true,
        "serverSide": true,
        "bDestroy": true,
        "iDisplayLength" : trans.show_rows,
        "ajax": ajaxUrl+"?action=get_communication_history&proj_id="+proj_id,
        language: {
            searchPlaceholder: "Search.."
        }       
    });
});

这里数据表显示旧数据几秒钟,然后是第一次显示实际数据。当用户再次检查选项卡而不重新加载页面时,它会显示正确的数据。 那么有人能告诉我为什么会出现这个问题吗?如何解决这个问题?任何帮助和建议都会非常明显。感谢

2 个答案:

答案 0 :(得分:0)

Ajax请求需要一些时间在服务器上处理并返回。

您可以使用一些加载程序来指示数据正在加载:

$('a.communication-data[data-toggle="tab"]').on('click', function(e) {
    // Indicate that you are loading data
    $('#get_communication').html('<tr><td>Loading...</td></tr>');

    // now do Ajax call
}

答案 1 :(得分:0)

我查看了文档并获得了一些方法,例如fnDrawCallbackfnPreDrawCallback。还有一个example对我有帮助。

所以最后我的代码就像这样

$('a.communication-data[data-toggle="tab"]').on('click', function(e) {
    $('#get_communication_history').dataTable().fnDestroy();
    var proj_id = $('input#user_project_id').val();
    $('#get_communication_history').dataTable({
        "processing": true,
        "fnPreDrawCallback": function() { 
            showMessage();
        return true;
        },
        "fnDrawCallback": function() {
        hideOverlay();
        },              
        "serverSide": true,
        "bDestroy": true,
        "iDisplayLength" : trans.show_rows,
        "ajax": ajaxUrl+"?action=get_communication_history&proj_id="+proj_id,
        "language": {
            "searchPlaceholder": "Search..",
        }       
    });
});

function showMessage() {
    $('table#get_communication_history > tbody').html("");
    parentHtml = $('<tr><td colspan="5"><div class="communication-history-loading" style="text-align: center; font-weight: bold;">Please wait! Getting communication history..</div></td></tr>');
    $('table#get_communication_history tbody').html(parentHtml);
}

function hideOverlay() {
    parentHtml = $('<tr><td colspan="5"><div class="communication-history-loading" style="text-align: center; font-weight: bold;">Please wait! Getting communication history..</div></td></tr>');
    $('table#get_communication_history > tbody').remove(parentHtml);
}