javascript逐行显示数据及php实时输出前端内容后台保持继续运行的解决方案(setTimeout定时器、flush和ob_flush函数、安装进度展示)

简介: javascript逐行显示数据及php实时输出前端内容后台保持继续运行的解决方案(setTimeout定时器、flush和ob_flush函数、安装进度展示)

在数据可视化大屏显示的过程中,需要ajax读取后台数据,然后在前端显示出来。一般来说,异步加载后,遍历循环输出,数据正常情况下会一下子全部展示出来,能不能将返回的数据逐行输出呢?

在php后台安装程序过程或者数据库备份时,基于php的运行特点,是执行完全部代码后才予以输入内容。能否在后台运行的同时又让前端显示内容,避免用户不知道等待多少时间带来的无助感呢?

一、前端Ajax展示的解决方案

HTML容器

<div class="text-box" id="text-box">
    <div class="license" id="license"></div>
</div>


js数组静态模拟数据

  for (var i = 0; i < 1000; i++) {
        (function (t) {//形参
            setTimeout(function () {
                // console.log(`这是第 ${t} 次`);
                $("#license").append(t + " 账号创建成功...<br/>");
            }, 500 * t);// 执行一次的时间间隔,非累加
        })(i)  //注意实参,将要用的参数传进去
    }


演示效果

二、php实时输出前端内容的解决方案

案例采用Discuz!安装进度的经典案例作为分析。

构建HTML容器

<div class="text-box" id="text-box">
    <div class="license" id="license"></div>
</div>


showMessage(message)封装函数

   function showMessage(message) {
            document.getElementById('license').innerHTML += message + "<br/>";
            document.getElementById("text-box").scrollTop = 500 + scroll_height;
            scroll_height += 100;
        }

PHP后台数据模拟

set_time_limit(0);   //设置运行时间
echo str_repeat(" ",4096);//随便输出一段代码当即输出
showjsmessage('数据表 ... 创建成功');
for ($i = 0; $i < 100; $i++) {
    showJSMessage($i);
}
//抛出JS信息
function showJSMessage($message)
{
    echo '<script type="text/javascript">showMessage(\'' . addslashes($message) . '\');</script>' . "";
    flush();
    ob_flush();
}


常见问题说明

php采用showMessage(message)的方式,并没有出现向ajax显示一样的逐行显示动画;

采用网上通用的增加sleep(1)函数,不管是在windows系统还是linux系统,只是延迟了显示时间,也未出现逐行展示的动画效果;

因此,案例仍按Discuz!的经典写法只使用flush()和ob_flush()函数作为强制输出缓冲的方法;

set_time_limit(0); 一定要设置运行时间,否则,php运行时间过长会自动停止运行;

@漏刻有时

相关文章
|
1月前
|
JavaScript 前端开发
JS如何处理后台时间
JS如何处理后台时间
|
1月前
|
Java 程序员 PHP
01 入门PHP就来我这-安装phpstudy
路老师的PHP入门教程,带你从零开始学习PHP。首先下载并安装phpStudy,接着配置域名和端口,最后创建并运行第一个PHP文件。内容详实,适合初学者。
46 3
01 入门PHP就来我这-安装phpstudy
|
26天前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。
|
1月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
1月前
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
45 7
|
2月前
|
NoSQL MongoDB PHP
PHP7 MongDB 安装与使用
10月更文挑战第19天
38 1
PHP7 MongDB 安装与使用
|
1月前
|
数据库连接 PHP Apache
PHP在Apache中如何运行?
PHP在Apache中如何运行?
42 5
|
1月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
1月前
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
34 1
|
2月前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
35 7
下一篇
DataWorks