最近工作需要在原来静态看板(大屏)页面的基础上,实现数据的动态展示,而且需要定时刷新。

接到任务后就马不停蹄的开始修改页面:

显然这个需求最好的解决方法就是用Ajax对后台数据进行定时请求,在前端页面进行刷新

基本的效果是这个样子的:

对后台数据进行遍历,循环展示在表格上。

老实讲,做个Ajax向后端请求数据确实easy,但是刺激的是没有后台交互的模块给我拿来测试,作为实习生的我又不可能招呼其他人来帮助我完成测试。

所以还是得靠自己。

接下来我只能凭借我做博客系统积攒的一些PHP经验写出一个后台模块,独立完成测试工作。

代码如下:

<?php
//连基础元数据都是我自己拍脑袋模拟出来的,有点崇拜我寄几了呢!
$json = '{
"data": [
{
"TOP_LINE": 10000,
"BOTTOM_LINE": 500,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":3000,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "外轮星"
},
{
"TOP_LINE": 30000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 40000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":3000,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "外星轮"
},
{
"TOP_LINE": 50000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 60000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":5121,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "实轴"
},
{
"TOP_LINE": 20000,
"BOTTOM_LINE": 5000,
"NOW_NUMBER":3000,
"THIS_MOUTH_TAKEIN":0,
"THIS_MOUTH_TAKEOUT":0,
"LAST_MOUTH_TAKEIN":0,
"LAST_MOUTH_TAKEOUT":0,
"RAW_MATERIAL_BATCH_NUMBER_": "SDS-7120",
"OWN_ADRESS": "GEM",
"MATERIAL_NAME_": "外星轮"
}
],
"success": true,
"total": 2
}';
//Ajax传过来的参数,page是页码,listnum是每页展示的数据条数
$page = $_GET['page'];
$listNum = $_GET['listNum'];
//这个函数蛮重要的json_decode();因为实际上$json我们定义的是个String ,这个函数将它转化成json格式的数据
$jsondata=json_decode($json);
//定义头文件,防止乱码
header("Content-Type: text/html; charset=UTF-8");
//print_r($jsondata);
//这样我们就可以拿到我们要的数组了
$arr = $jsondata->data;
//echo $arr;
//下面是为了拆分后台数据所做的努力了:$sign是判断总数据可以分成多少页
$sign = intval(count($arr)/$listNum)+1;
//如果传过来的页码大于总页码,不好意思,智能取模了,这样才能一直循环下去
if ($page >= $sign) {
$page = $page % $sign;
}
//array_slice(array,start,length),php截取数组的方法
$toget = array_slice($arr,$page*$listNum,$listNum);
//返回数据
echo json_encode($toget); ?>

顺便说一下我们老大给我派发任务的时候的一个知识点:

  • 我原来的思路是用一次Ajax请求将后台数据全部拿到,然后在前端分页循环展示(这可能是作为前端开发者常有的思维,),这个思路看似没有问题。
  • 因为我们的系统是要部署到工业生产现场的,网络延迟和实时数据 是两个不得不考虑的问题,那么这个时候就必须减少每次请求的负载,还要考虑数据的实效性。
  • 这样一来显然通过小批量多频次请求数据更靠谱。
  • 所以有了现在的解决方案。

为了方便读者理解整个思路,附上Ajax请求部分代码:

window.onload=function(){
var page = 0 ;
var listNum = 6;
console.log('000');
getAjax(page,listNum);
//getAjax(page,listNum);
setInterval(function(){
page++;
//getAjax(page,listNum);
console.log(page); getAjax(page,listNum); },3000); function getAjax(page,listNum){
var args = {"page":page,"listNum":listNum,"time":new Date()};
$.getJSON('../json/storage_rawInventeryView.php',args,function(result){
//console.log('123');
var arr = result;
console.log(arr);//调试数据
//改变颜色专用变量
var markup = true;
var color;
//调整数据的顺序 //循环遍历json,将获取到的数据插入到页面上
$('tbody').empty();
for (var i = 0; i < arr.length ; i++) {
$('tbody').append('<tr></tr>');
markup = !markup;
if(markup){
color = '#58D5FF';
}else{
color = '#fff';
}
//调整数据的顺序
var turnList = ["RAW_MATERIAL_BATCH_NUMBER_","MATERIAL_NAME_","TOP_LINE","BOTTOM_LINE","NOW_NUMBER","LAST_MOUTH_TAKEOUT","THIS_MOUTH_TAKEIN","THIS_MOUTH_TAKEOUT","LAST_MOUTH_TAKEIN","OWN_ADRESS"]; for(var q = 0;q < turnList.length; q++){
//console.log(turnList[q]);
if(arr[i][turnList[q]]=='是'){
var tdHtml = '<td style="word-wrap: break-word;text-align:center;font-size:2.5vw;color:#1DFC8A;" class="ng-binding ng-scope">合格</td>';
}else if(arr[i][turnList[q]]=='否'){
var tdHtml = '<td style="word-wrap: break-word;text-align:center;font-size:2.5vw;color:#F3423C;" class="ng-binding ng-scope">退货</td>';
}else{
var tdHtml = '<td style="word-wrap: break-word;text-align:center;font-size:2.5vw;color:'+color+';" class="ng-binding ng-scope">'+arr[i][turnList[q]]+'</td>';
}
//console.log(tdHtml);
$('tbody>tr:eq('+i+')').append( tdHtml);
}
}
});
} }

关于PHP处理Json数据的例子的更多相关文章

  1. php返回json数据函数例子

    json_encode()函数用法. echo json_encode(array('a'=>'bbbb','c'=>'ddddd'); 这样就会生成一个标准的json格式的数据 代码如下 ...

  2. Highcharts获取json数据展现pie饼图

    实际上很多时候图表展现的数据都是从服务器端获取,现在来做一个简单的异步获取json数据的例子. 服务器端用Servlet3.0实现,JSP页面通过jquery异步请求json数据提供给Highchar ...

  3. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  4. 使用Gson转换json数据为Java对象的一个例子

    记录工作中碰到的一个内容. 原料是微信平台的一个接口json数据. { "errcode" : 0, "errmsg" : "ok", &q ...

  5. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  6. 利用Python进行数据分析(2) 尝试处理一份JSON数据并生成条形图

    一.JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况. ...

  7. MVC使用ajax异步刷新时怎样输出从后台中传过来的JSON数据

    前言 这几天在学习MVC使用AJAX异步刷,因为是新手.所以在js中传参数到后台以及后台返回数据到前台怎么接受,怎么前台遍历出JSON数据都开始不知道,相信新手在使用时跟我一样会遇到,这里我就和大家分 ...

  8. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  9. JSON数据的使用

    JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON ...

随机推荐

  1. VB 对象未注册

          像往常一样,打开我的VB,开始我的学生信息管理系统,突然弹出如下对话框:                                                           ...

  2. 大数据批量导入,解决办法,实践从定时从 sqlserver 批量同步数据到 mySql

    c#代码,批量导入数据代码 public class MySql_Target : ZFCommon.DataAccesser.Base.DABase { public MySql_Target() ...

  3. java虚拟机的类加载机制

    引言 我们写的代码是放在.java文件中,经过编译器编译后,转成.class文件.Class文件是一串二进制流,它可以被各平台的虚拟机所接受,实现跨平台.      虚拟机将描述类的数据从class文 ...

  4. Java的运行原理

    在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由 ...

  5. Linux的硬盘分区

    关于硬盘分区,这里先只讨论硬盘分区的方法在linux环境下,其他知识以后也会陆续说到 首先我们通过 df 命令查看一下硬盘的使用情况,在安装硬盘分区后做比较用 [root@bogon ~]# df - ...

  6. Google Bigtable (中文版)

    http://dblab.xmu.edu.cn/post/google-bigtable/ Abstract BigTable是一个分布式存储系统,它可以支持扩展到很大尺寸的数据:PB级别的数据,包含 ...

  7. Aptana下Django1.6以后的项目模板结构改造

    Django1.6以后的manage.py放在项目包目录的根目录下,这种情况下在create app的app也在这个目录下面,由此可能导致app的名称有可能会和广大的内建包或者第三方包发生命名冲突,解 ...

  8. 通知:QQ互联网回调地址校验加强

    今天公司网站第三方qq快捷登录突然登录不了了,之前明明是ok的. 可以看到有一个错误信息提示 在qq互联的官网看到了这个通知 然后解决办法是: 1.打开http://open.qq.com/tools ...

  9. 如何找某个样式属于哪个Element

    如果找不到样式所在的Element,那么可以参考排除法,逐个删除覆盖在同一位置的元素,如果该样式消失,那么可以判断为这个样式.

  10. 转载 Elasticsearch开发环境搭建(Eclipse\MyEclipse + Maven)

    概要: 1.使用Eclipse搭建Elasticsearch详情参考下面链接 2.Java Elasticsearch 配置 3.ElasticSearch Java Api(一) -添加数据创建索引 ...