【问题标题】:DataTables inform load time while loading AJAX dataDataTables 在加载 AJAX 数据时通知加载时间
【发布时间】:2017-10-31 15:29:48
【问题描述】:

我有一些表开始为空,DataTables 向 WebServer 请求数据。

加载它需要几分钟时间是可以的。 DataTables 显示默认加载消息。但我想添加一个计数器来通知加载运行了多长时间,而不是简单的加载文本或一些古怪的动画。

我在其文档中找不到方法。有可能吗?

更新:MonkeyZeus 的回答完美。这是我的最终代码:

// ...
,dataTablesLoading: function(e, settings, processing ){
    setTimeout(function(){
        var targetJs = e.target;
        var target = $(targetJs);
        var timerContainer = target.find('.dataTables_empty');
//tlog(targetJs,'targetJs');
//tlog(target,'target');
//tlog(timerContainer,'timerContainer');

        if(processing){
                var timer = 0;
                var timerHandler = setInterval(function(){
                    timer++;
                    var hours = Math.floor(timer/3600);
                    var minutes = Math.floor((timer-(hours*60))/60);
                    var secs = timer-(hours*3600)-(minutes*60);

                    var timerText = hours+':'+minutes.lpad("0",2)+':'+secs.lpad("0",2);
tlog(timerText,'timerText');
//tlog(timerContainer,'timerContainer');
                    timerContainer.text("Loading... "+timerText);
                },1000);


            targetJs.setAttribute("data-loading-timer",timerHandler);
tlog(timerHandler,'timerHandler processing');
        }else{
            var timerHandler = parseInt(targetJs.getAttribute("data-loading-timer"));
tlog(timerHandler,'timerHandler not processing');

            if(timerHandler>0)
                clearInterval(timerHandler);
        }

    },1000);
}
// ...
$('#...')
    .on( 'processing.dt', Framework.utils.dataTablesLoading )
    .DataTable({...})

【问题讨论】:

  • 你永远无法做到这一点(我猜你会想到一种进度条),除非你有一个与服务器的连接,它可以返回状态、行数等。但是一个时钟显示经过的时间会很容易。
  • Tnx 回复。不需要进度条 ou % 已完成。我只想要一个时分秒计数器来知道加载运行了多长时间。

标签: javascript jquery ajax datatable datatables


【解决方案1】:

First, you will need to enable processing when invoking the datatable:

$('#example').dataTable( {
    "processing": true
} );

Next, you will need to declare what happens instead of the default Loading message using the dt namespace's processing event listener:

// This event will fire twice so pay attention to the processing parameter
$('#example').on( 'processing.dt', function ( e, settings, processing ) {
    if( processing  === true ) {
        alert('Hey, we are processing!');
        // some custom code which targets #processingIndicator and applies some timer plug-in or whatever; you figure it out.
    }
    else {
        alert('Hey, we are done processing!');
        // some custom code which targets #processingIndicator and hides it; you figure it out.
    }
} )
.dataTable();

此外,较长的加载时间也需要考虑用户体验,因此如果您想获得更好的体验,请务必查看https://ux.stackexchange.com/a/80858/45170

【讨论】:

  • 谢谢你去试试。我有一个缓存功能,一旦加载数据,它就会存储在一个文件中,并且使用该文件而不是查询数据库。缓存持续1h,但之后需要更新,因为我不能让数据过时。
  • @Hikari 我明白了。如果您有能力创建 cron 作业/计划任务,那么您可以选择设置每小时刷新一次缓存文件,而不是给用户增加负担。
  • @Hikari 运气好吗?
  • 抱歉耽搁了。我试过了,甚至触发了,一次是在加载开始时,一次是在加载完成时。但我无法从活动内部判断它是开始还是结束。你知道这方面的最佳做法吗?
  • 我可以给你答案,但这并不好玩,请尝试阅读我链接的文档;特别是function ( e, settings, processing ).
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 2013-05-15
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多