首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数据库检索数据时如何显示加载动画或进度条?

从数据库检索数据时如何显示加载动画或进度条?
EN

Stack Overflow用户
提问于 2015-02-27 21:29:37
回答 4查看 26.8K关注 0票数 5

  • 每次访问此页面时,我都会从数据库中检索大约15,000个行。
  • 页面可能需要8-10秒才能完成所有的加载--我现在使用DataTable
  • 我认为在这段时间内向用户展示任何类型的加载反馈是很好的。
  • 我希望创建自己的加载动画,并选择自己的颜色、样式和大小。

  • 如果我使用任何Ajax调用,我就不会。
  • 我只是从我的数据库中检索了很多数据。

在从数据库中检索数据时显示加载动画的最有效方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-02 14:35:03

首先,最简单的解决方案是使用ajax调用来检索由php填充的表行。

JSFiddle

SIMPLE:

main.html / main.php

代码语言:javascript
运行
复制
/*This makes the timeout variable global so all functions can access it.*/
var timeout;

/*This is an example function and can be disregarded
This function sets the loading div to a given string.*/
function loaded() {
  $('#loading').html('The Ajax Call Data');
}

function startLoad() {
    /*This is the loading gif, It will popup as soon as startLoad is called*/
    $('#loading').html('<img src="http://rpg.drivethrustuff.com/shared_images/ajax-loader.gif"/>');
    /*
    This is an example of the ajax get method, 
    You would retrieve the html then use the results
    to populate the container.
    
    $.get('example.php', function (results) {
        $('#loading').html(results);
    });
    */
    /*This is an example and can be disregarded
    The clearTimeout makes sure you don't overload the timeout variable
    with multiple timout sessions.*/
    clearTimeout(timeout);
    /*Set timeout delays a given function for given milliseconds*/
    timeout = setTimeout(loaded, 1500);
  }
  /*This binds a click event to the refresh button*/
$('#start_call').click(startLoad);
/*This starts the load on page load, so you don't have to click the button*/
startLoad();
代码语言:javascript
运行
复制
img {
  width: 100px;
}
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='start_call'>Refresh</button>
<div id='loading'></div>

php的示例如下所示

example.php

代码语言:javascript
运行
复制
/*Database call to get list*/
foreach($list as $li){
    echo "<tr><td>$li[var1]</td><td>$li[var2]</td></tr>";
}

高级:

加载内容的一种更高级的方法是将网络工作者多个数据库调用隔离成小块。

您将设置web工作者来执行小的100行结果,并在sql语句中使用LIMIT将结果页面划分为小块。然后,当其他结果正在加载时,您可以分页查看前100个结果。

这个过程比较困难,需要更长的时间来实现,但是会导致无缝和快速的加载。

编辑

如果要更改加载动画,只需更改URL即可。如果您希望在页面加载上加载URL,请将其放在div本身中。

代码语言:javascript
运行
复制
/*This will make the img load on page load rather than DOM execution.*/
<div id='loading'>
    <img src="http://rpg.drivethrustuff.com/shared_images/ajax-loader.gif"/>
</div>

图像不一定是图像。它可以是你想要的任何加载图标。礼物又快又脏。你可以用像字体-可怕的旋转器这样的东西

票数 5
EN

Stack Overflow用户

发布于 2015-03-02 16:02:19

data.php来签出DB并构建表的HTML

代码语言:javascript
运行
复制
function getData(){

    //div contains the loader
    $('#loader').show();

    $.get('clients/data.php', function(data) {
        //
        $('#content').html(data);
        //hide the loader
        $('#loader').hide();
        //build DataTable
        $('#content table').dataTable();

    });
}

getData();
票数 4
EN

Stack Overflow用户

发布于 2015-02-27 21:41:48

这取决于您使用的语言,但基本原理是相同的。在查询完成时,只使用动画加载页面,然后用内容替换动画。

在jQuery中,这可能意味着用普通的HTML链接动画,然后使用AJAX单独调用数据库。当得到结果时,可以使用jQuery附加定位内容区域,并实时写入内容区域。

我包括PHP,因为您说不使用AJAX,但是在PHP中,结构是相同的:您需要链接图像,刷新页面,以便它显示,然后执行查询。在搜索结果中用否定的CSS margin-top覆盖动画,而Bob是您的叔叔。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28774634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档