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

文章目录

    • 需求
      • 登录页面
      • 主页面
    • 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>

关于后端

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具&#xff0c;在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂&#xff0c;网站反爬虫技术的不断进步&#xff0c;网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战&#xff0c;HTTP 代理成…

已解决 SyntaxError: invalid syntax,Python报错原因和解决方案。

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这篇文章带大家…

创建一个Django用户认证系统

目录 1、Django2、Django用户认证系统User 模型&#xff1a;Authentication 视图&#xff1a;认证后端 (Authentication Backends)&#xff1a;Form 类&#xff1a;中间件 (Middleware)&#xff1a;权限和组 (Permissions and Groups)&#xff1a; 3、创建一个django用户认证系…

科普文:一文搞懂jvm原理(二)类加载器

概叙 科普文&#xff1a;一文搞懂jvm(一)jvm概叙-CSDN博客 前面我们介绍了jvm&#xff0c;jvm主要包括两个子系统和两个组件&#xff1a; Class loader(类装载器) 子系统&#xff0c;Execution engine(执行引擎) 子系统&#xff1b;Runtime data area (运行时数据区域)组件&am…

“一带一路”再奏强音!秘鲁总统博鲁阿尔特参访苏州金龙

6月27日下午&#xff0c;首次访华的秘鲁共和国总统博鲁阿尔特一行到苏州金龙参观访问&#xff0c;受到了苏州金龙总经理黄书平的热情接待。 黄书平&#xff08;左二&#xff09;向博鲁阿尔特&#xff08;右一&#xff09;介绍苏州金龙发展情况 从苏州金龙发展历程、产品技术研…

【UE5.1】Chaos物理系统基础——02 场系统的应用

目录 步骤 一、运用临时场&#xff08;外部张力&#xff09;破裂几何体集 二、使用构造场固定几何体集 步骤 在上一篇中&#xff08;【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体&#xff09;我们已经创建了可被破碎的几何体集&#xff0c;在最后我们防止几何体集…

基于K线最短路径构造的非流动性因子

下载地址https://download.csdn.net/download/SuiZuoZhuLiu/89492221

暴雨来袭,陈赫家变“水帘洞”网友:赫哥滴滴打船吗?

在魔都上海&#xff0c;一场突如其来的暴雨 不仅让街道变成了河流&#xff0c;还悄悄上演了一场现实版的“水帘洞”奇遇 而这场奇遇的主角&#xff0c;竟然是喜剧界的明星——陈赫&#xff01; 这天&#xff0c;乌云密布&#xff0c;电闪雷鸣 魔都的天空仿佛被捅了个窟窿 雨…

通过源码抽丝剥茧理解enable_shared_form_this/shared_ptr/weak_ptr智能指针实现原理

源码解析 首先先看如下简单代码,我们通过代码的顺序逐步解析 #include <iostream> #include <memory> using namespace std;class C :public enable_shared_from_this<C>{ public:C(){ std::cout<<"construct"<<endl; }~C(){ cout&l…

mqtt介绍和环境安装

Mqtt介绍 MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、高延迟或不可靠的网络而设计。 下载一个开源的emqx服务器和…

ARM功耗管理软件之时钟电源树

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理软件栈及示例&#xff1f;WFI&WFE&#xff1f;时钟&电源树&#xff1f;DVFS&AVS&#xff1f; 目录 一、时钟&电源树简介 二、时钟树示例 三、电源树示例 一、时钟&电源树简介 时钟门控与自…

iPhone苹果手机iOS18如何隐藏打开APP怎么找出来恢复隐藏APP?

iPhone苹果手机如何隐藏APP&#xff1f; 1、iPhone苹果手机上一些APP不想让别人看到可以设置为隐藏APP&#xff0c;请长按要设置隐藏的APP&#xff0c;选择需要面容ID&#xff1b; 2、然后再接着选择隐藏并需要面容ID&#xff0c;选择后手机桌面将不在显示该APP&#xff1b; i…

短剧挂载推广教程,短剧项目怎么分销推广?如何入驻平台当推广达人?达人推广的方式是怎么样的

目录 一、短剧怎么做&#xff1f; 二、在哪找资源挂?怎么挂? 1、在哪找资源挂? 2、怎么挂? 三、有哪些短剧看剧平台或者分销平台? 1&#xff1a;短剧看剧小程序怎么入驻当达人? 2&#xff1a;短剧cps分销小程序怎么入驻当达人? 一、短剧怎么做&#xff1f; 想要当…

[leetcode]minimum-absolute-difference-in-bst 二叉搜索树的最小绝对差

. - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null…

Meta低头,库克认错,XR回归第一性原理

图片&#xff5c;Photo by Maxim Hopman on Unsplash ©自象限原创 作者丨罗辑 2024年&#xff0c;XR的故事应该怎么讲&#xff1f; 如果从数据上看&#xff0c;这应该是个沉重的话题。 根据 IDC 报告&#xff0c;2023 年全球 VR 市场出货量下滑了 10.7%。2024 年第一…

安全为基、创新驱动,Soul App创始人张璐团队大力筑牢社交平台发展之基

随着技术的不断进步,AIGC在各个领域的应用日益广泛。在社交领域,AIGC社交为用户带来了更加高质量、个性化的社交体验,但同时也伴随着数据隐私泄露、网络诈骗和不良信息误导等风险。因此,社交平台在抓住AIGC技术发展机遇的同时,也要警惕技术所带来的风险。新型社交平台Soul App坚…

离线应用PWA-service work

1.有时候希望没有网络的时候,也可以正常的访问对应的页面,就需要用到service work 进行对应的配置,可以当页面的配置 也可以多页面的配置,单页面配置比较麻烦 就以uniapp框架为基础 来配置service work 一 配置 manifest 文件 (此manifest和uniapp 的 manifest.不是同…

网安小贴士(1)等级保护

一、定义 等保&#xff0c;即信息安全等级保护&#xff0c;根据信息系统在国家安全、经济建设、社会生活中的重要程度&#xff0c;以及信息系统遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权益的危害程度&#xff0c;将信息系统分为五个不同的安全…

[leetcode]文件组合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

《塔瑞斯世界》国服震撼登场!AOC助力玩家开启游戏新征途!

一款真正高画质、重机制、轻数值的MMORPG大作&#xff01; 你是否厌倦了在MMORPG游戏中被“氪金大佬”碾压&#xff1f;你是否渴望一个纯粹依靠技术和策略就能获得成就感的游戏世界&#xff1f;如果你对这两个问题的答案都是肯定的&#xff0c;那么《塔瑞斯世界》或许值得你一…