前端学习笔记(2406261):jquery使用checkbox控制页面自动刷新

news2024/11/23 7:19:03

文章目录

    • 需求
      • 登录页面
      • 主页面
    • API
      • 用户登录login
      • 获取数据getdata
    • 代码
      • 登录页面
      • 主页面
    • 关于后端

需求

这是一个物联网的演示项目,web端能够实时显示后台数据的变化,其流程非常简单:

  1. 用户登录
  2. 登录成功后显示主界面面
  3. 主界面进入后自动显示数据
  4. 数据两秒钟自动刷新一次
  5. 设置日期和时间可以对数据进行筛选
  6. 勾选掉自动刷新后,停止自动刷新
  7. 点击刷新按钮可以强制刷新。

登录页面

登录页面可以输入用户名和密码,提交到服务端验证后,可以跳转到主界面。
登录界面

主页面

主界面的元素有:开始时间,结束时间,自动刷新开关,刷新按钮
表格的列有:序号、温度、压力、电压、位置、行程开关状态、数据上报的时间等。

说明数据均为模拟数据,而非实际数据。

主界面

API

系统一共有两个API,分别是:

  • login:用于用户登录
  • 获取数据:获取设备数据

用户登录login

login方法采用post,发送用户名和密码,如果登录成功,返回的code0,且附带一个token,后续请求需要将token放在header中。
login方法

获取数据getdata

登录成功后,使用getdata来获取数据,采用post请求,需要将token放在header中。body为json格式,可以传递fromto两个参数,其格式为yyyy-mm-dd hh:nn:ss,这两个参数不是必须的。
请求成功后,将返回数据包,包括codemsgdata,其中data是一个数组,包含了传感器的数据,分别是:temperaturepressurevoltagepositionswitchtime
getdata方法

代码

登录页面

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
    <style>
        body {
            background-color: #333;
            color: #fff;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        form {
            display: flex;
            flex-direction: column;
            align-items: center;
        }
        input {
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <form id="loginForm" method="post">
        <input type="text" id="username" placeholder="用户名" required>
        <input type="password" id="password" placeholder="密码" required>
        <button type="submit">登录</button>
    </form>
    <script>
        document.getElementById('loginForm').addEventListener('submit', function(event) {
            event.preventDefault();
            const username = document.getElementById('username').value;
            const password = document.getElementById('password').value;
            if (!username || !password) {
                alert('用户名和密码不能为空');
                return;
            }
            const data = {
                username: username,
                password: password
            };
            fetch('/mgr/login', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(data)
            })
            .then(response => response.json())
            .then(result => {
                if (result.code === 0) {
                    document.cookie = 'token=' + result.token;
                    window.location.href = '/main';
                } else {
                    alert('登录失败,请检查用户名和密码');
                }
            })
            .catch(error => {
                console.error('Error:', error);
            });
        });
    </script>
</body>
</html>

主页面

页面使用了jquery,用checkbox来控制页面的刷新,主要的代码是:

$("#autoRefresh").click(function(){
	if ($("#autoRefresh").is(':checked')){
		interval_id = window.setInterval(queryData, 2000);
	}else{
		window.clearInterval(interval_id)
	}
})

可以使用is方法来判断checked来确定checkbox是否处于选中状态。

另外,通过window.setInterval的方法,可以设置一个定时器,实现数据的定时获取。

完整的代码如下:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据查询</title>
    <style>
        body {
            background-color: #333;
            color: #fff;
        }
		.centered {
			display: flex;
			justify-content: center;
			align-items: center;
			height: 100%;
		}
		
		table {
			border-collapse: collapse;
			width: 80%;
			margin: 0 auto;
			margin-top: 40px;
		}
		th, td {
			border: 1px solid #ccc;
			padding: 8px;
			text-align: center;
		}
		th {
			background-color: #333;
		}
    </style>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
	<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
</head>
<body>
    <div class="centered">
        <label for="startTime">开始时间:</label>&nbsp
        <input type="datetime-local" id="startTime">&nbsp &nbsp
        <label for="endTime">结束时间:</label>&nbsp
        <input type="datetime-local" id="endTime">&nbsp &nbsp
		<input type="checkbox" id="autoRefresh" checked>自动刷新(2s)</input>&nbsp  &nbsp
		<button id="queryBtn">立即刷新</button>
    </div>
    <table id="resultTable">
        <thead>
            <tr>
                <th>序号</th>
                <th>温度</th>
                <th>压力</th>
                <th>电压</th>
                <th>位置</th>
                <th>开关</th>
                <th>时间</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>
     <script>
        $(document).ready(function() {
            var token = getCookie("token");
            if (!token) {
                window.location.href = "/login";
            }
            $("#queryBtn").click(queryData);
			//使用定时器刷新
			var interval_id = setInterval(queryData, 2000);
			$("#autoRefresh").click(function(){
				if ($("#autoRefresh").is(':checked')){
					interval_id = window.setInterval(queryData, 2000);
				}else{
					window.clearInterval(interval_id)
				}
			})

			//初始化时刷新
			queryData();
        });

        function getCookie(name) {
            var value = "; " + document.cookie;
            var parts = value.split("; " + name + "=");
            if (parts.length == 2) return parts.pop().split(";").shift();
        }
		function queryData(){
			var startTime = $("#startTime").val();
			if (startTime && startTime.length>6){
				startTime = moment(startTime).format("YYYY-MM-DD HH:mm:ss");
			}
			var endTime = $("#endTime").val();
			if (endTime && endTime.length>6){
				endTime = moment(endTime).format("YYYY-MM-DD HH:mm:ss");
			}
			var data = {
				'from': startTime,
				'to': endTime
			};
			var token = getCookie("token");
			$.ajax({
				url: "/mgr/getdata",
				type: "POST",
				contentType: "application/json",
				data: JSON.stringify(data),
				headers: {
					"token": token
				},
				success: function(response) {
					if (response.code === 0) {
						displayData(response.data);
					} else if (response.code === 340) {
						window.location.href = "/login";
					} else {
						alert(response.msg);
					}
				},
				error: function() {
					alert("请求失败,请稍后重试");
				}
			});
		}
        function displayData(data) {
            var tableBody = $("#resultTable tbody");
            tableBody.empty();
            data.forEach(function(item, index) {
                var row = $("<tr></tr>");
                row.append($("<td></td>").text(index + 1));
                row.append($("<td></td>").text(item.temperature));
                row.append($("<td></td>").text(item.pressure));
                row.append($("<td></td>").text(item.voltage));
                row.append($("<td></td>").text(item.position));
                row.append($("<td></td>").text(item.switch ? "开" : "关"));
                row.append($("<td></td>").text(item.time));
                tableBody.append(row);
            });
        }
    </script>
</body>
</html>

关于后端

回头再写吧,估计也没人看,有需要的可以留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的Checked Exception和Unchecked Exception的区别

在Java中&#xff0c;异常分为两大类&#xff1a;已检查异常&#xff08;Checked Exception&#xff09;和未检查异常&#xff08;Unchecked Exception&#xff09;。 已检查异常是在编译时必须被捕获或声明的异常。换句话说&#xff0c;如果你的方法可能会抛出某个已检查异常&…

古人的智慧结晶——水铳:揭秘明清时期的消防神器

明代的《奇器图说》是一本记录了当时各种奇巧机械的著作&#xff0c;而水铳则是书中记载的一项令人惊叹的发明&#xff0c;它不仅展示了古人对物理原理的深刻理解&#xff0c;更是早期消防技术的一个缩影。 水铳&#xff0c;这个名字听起来似乎有些陌生&#xff0c;但在古代&am…

Kafka~消息发送过程与ISR机制了解

消息发送过程 使用Kafka发送消息时&#xff0c;一般有两种方式分别是&#xff1a; 同步发送异步发送 同步发送时&#xff0c;可以在发送消息后&#xff0c;通过get方法等待消息结果&#xff0c;这种情况能够准确的拿到消息最终的发送结果&#xff0c;要么是成功、要么是失败…

AES加密算法及AES-CMAC原理白话版系统解析

本文框架 前言1. AES加密理论1.1 不同AES算法区别1.2 加密过程介绍1.2.1 加密模式和填充方案选择1.2.2 密钥扩展1.2.3分组处理1.2.4多轮加密1.2.4.1字节替换1.2.4.2行移位1.2.4.3列混淆1.2.4.4轮密钥加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…

社团成员信息系统

ER实体关系图与数据库模型 DDL CREATE TABLE club (club_id int(11) NOT NULL AUTO_INCREMENT,club_name varchar(100) NOT NULL,president_name varchar(50) DEFAULT NULL,foundation_date date DEFAULT NULL,description text,PRIMARY KEY (club_id),KEY president_name (pr…

虚拟化技术(二)

目录 三、存储虚拟化&#xff08;一&#xff09;存储虚拟化的一般模型&#xff08;二&#xff09;存储虚拟化的实现方式&#xff08;三&#xff09;案例分析 四、网络虚拟化&#xff08;一&#xff09;核心层网络虚拟化&#xff08;二&#xff09;接入层网络虚拟化&#xff08;…

生成独立的zedboard+ad9361起始项目

文件分享 链接&#xff1a;https://pan.baidu.com/s/17wB_9xVWjO7HhxNvmmZyuA 提取码&#xff1a;94zz 首先下载HDL和NO-OS项目 git clone --recursive https://github.com/analogdevicesinc/hdl git clone --recursive https://github.com/analogdevicesinc/no-OS下载…

L03_Redis知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。 Redis 全景图 Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。 Redis …

基于springboot实现学生用品采购系统项目【项目源码+论文说明】

基于springboot实现学生用品采购系统演示 摘要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装学生用品采购系统软…

STM32CubeMx的学习记录系列(2)- STM32G474RET6

最近有个小比赛&#xff0c;需要用到G4&#xff0c;不过找了一圈没有找到标准库的代码&#xff0c;只能使用hal&#xff0c;用CubeMX来生成配置代码。 共同特点 ARDUINO Uno V3 扩展连接器 ST morpho 扩展引脚接头&#xff0c;可完全访问所有 STM32 I/O 采用LQFP64或LQFP48封…

算法 —— 双指针

目录 移动零 复写零 快乐数 盛最多水的容器 有效三角形的个数 查找总价格为目标值的两个商品 三数之和 四数之和 移动零 下图以样例1为例&#xff0c;看下图如何做到保证非零元素相对顺序前提下&#xff0c;移动零元素。 代码实现如下&#xff1a; class Solution {…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

如何有效保护生物医药企业隔离网数据导出的安全性?

生物医药企业的核心数据保护至关重要&#xff0c;企业为了保护内部的核心数据&#xff0c;会将网络进行物理隔离&#xff0c;将企业内⽹与外⽹隔离。⽹络隔离后&#xff0c;仍存在重要数据从内网导出至外网的隔离网数据导出需求。以下是一些需要特别保护的核心数据类型&#xf…

小米平板6系列对比

小米平板6系列目前有4款&#xff0c;分别为6、6 Pro、6 Max、6S Pro。具体对比如下表所示。 小米平板型号66 Pro6 Max6S Pro实物图发布时间2023年4月21日2023年4月21日2023年8月14日2024年2月22 日屏幕大小11英寸11英寸14英寸12.4英寸分辨率2.8K2.8K2.8K3K刷新率144Hz144Hz120…

EtherCAT笔记(四)——EtherCAT数据帧结构

EtherCAT数据包含2B的数据头和44~1948B的数据区。数据区由多个子报文组成。由于EtherCAT本身是通过以太网数据帧的形式传输&#xff0c;因此其协议帧中会携带以太网的帧头。 其中&#xff0c;解释如下&#xff1a; &#xff08;1&#xff09;以太网数据帧头&#xff1a;EtherC…

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置&#xff0c;如何控制调试过程&#xff0c;如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

C语言力扣刷题11——打家劫舍1——[线性动态规划]

力扣刷题11——打家劫舍1和2——[线性动态规划] 一、博客声明二、题目描述三、解题思路1、线性动态规划 a、什么是动态规划 2、思路说明 四、解题代码&#xff08;附注释&#xff09; 一、博客声明 找工作逃不过刷题&#xff0c;为了更好的督促自己学习以及理解力扣大佬们的解…

日志分析-windows系统日志分析

日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆&#xff0c;查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下&#xff0c;Security.evtx即为W…

有哪些防爬虫的方法

防爬虫的方法有robots.txt文、user-agent过滤、ip限制、验证码、动态页面生成、频率限制、动态url参数和反爬虫技术等。详细介绍&#xff1a;1、robots.txt文件&#xff0c;用于告诉搜索引擎爬虫哪些页面可以访问&#xff0c;哪些页面禁止访问&#xff1b;2、ip限制&#xff0c…

面试-J.U.C包的梳理

1.J.U.C包的梳理 Java.Util.Concurrent包简称JUC (1)JUC整体架构图 (2)分析 Executor&#xff1a;线程执行器&#xff0c;任务执行和调度的框架。Tools下存在executor相关的executors类&#xff0c;用于创建executorservice&#xff0c;scheduleexecutorservice&#xff0c;…