一个简洁的ajax注册登录找回密码切换的前端页面

成功和失败不同颜色显示,纯原生代码不需要jq等第三方插件 

<%@ Language="VBScript" CodePage="65001"%>
<%
Response.Charset = "UTF-8"
Session.CodePage = "65001"
Response.Addheader "Content-Type","text/html; charset=utf-8"
'On Error Resume Next
if Request("act")<>"" then
if Request("act")="login" then
username = Request.Form("username")
password = Request.Form("password")
If username = "testuser" And password = "testpassword" Then '账号密码看这里
response.ContentType = "application/json"
response.Write "{ ""success"": true, ""message"": ""登录成功"" }"
Else
response.ContentType = "application/json"
response.Write "{ ""success"": false, ""message"": ""用户名或密码错误"" }"
End If
end if
if Request("act")="register" then
username = Request.Form("username")
password = Request.Form("password")
' 模拟注册逻辑,这里简单返回成功(实际中要插入数据到真实数据库等操作)
response.ContentType = "application/json"
response.Write "{ ""success"": true, ""message"": ""注册成功"" }"
end if
if Request("act")="forgot-password" then
username = Request.Form("username")
email = Request.Form("email")
' 模拟找回密码逻辑,这里简单返回成功(实际中可能涉及发送邮件等复杂操作)
response.ContentType = "application/json"
response.Write "{ ""success"": true, ""message"": ""找回密码邮件已发送,请查收"" }"
end if
response.End
end if
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>注册登录找回密码页面</title>
<style>
.page-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f4f4f4;
}
/* 切换按钮样式 */
.tab-container {
display: flex;
justify-content: space-around;
width: 300px;
margin-bottom: -3px;
}
.tab {
padding: 10px;
border: 1px solid #3499d9;
background-color: #3499d9;
cursor: pointer;
}
.tab.active {
background-color: #0180cf;
color: white;
}
/* 内容区域通用样式 */
.content-container {
width: 300px;
background-color: white;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
border-radius: 5px;
padding: 20px;
}
.section {
display: none;
}
.section.active {
display: block;
}
/* 输入框样式 */
input {
width: 100%;
padding: 10px 0;
margin-bottom: 15px;
border: 1px solid #3499d9;
border-radius: 5px;
}
/* 按钮样式 */
button {
width: 100%;
padding: 10px;
background-color: #0180cf;
color: white;
border: 1px solid #0180cf;
border-radius: 5px;
cursor: pointer;
}
/* 错误消息样式 */
.error-message {
color: white;
padding: 10px;
margin-top: 10px;
border-radius: 5px;
}
.error-message.red {
background-color: red;
}
.error-message.blue {
background-color: green;
}
</style>
<script>
// 页面加载完成后执行
window.onload = function () {
// 获取所有切换按钮
const tabs = document.querySelectorAll('.tab');
// 获取所有内容区域
const sections = document.querySelectorAll('.section');
// 给切换按钮添加点击事件
tabs.forEach(tab => {
tab.addEventListener('click', function () {
// 移除所有按钮的active类
tabs.forEach(t => t.classList.remove('active'));
// 给当前点击的按钮添加active类
this.classList.add('active');
// 隐藏所有内容区域
sections.forEach(section => section.classList.remove('active'));
// 显示对应目标的内容区域
const targetId = this.dataset.target;
const targetSection = document.getElementById(targetId);
targetSection.classList.add('active');
});
});
// 获取登录按钮并添加点击事件
const loginButton = document.getElementById('login-button');
loginButton.addEventListener('click', function () {
const username = document.getElementById('login-username').value;
const password = document.getElementById('login-password').value;
// 创建Ajax请求对象(这里使用XMLHttpRequest,现代项目也可考虑使用fetch API)
const xhr = new XMLHttpRequest();
xhr.open('POST', '?act=login', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
if (response.success) {
//window.location.href = 'index.html';
const errorMessageDiv = document.getElementById('login-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('blue');
} else {
// 显示错误消息,红色背景白色字
const errorMessageDiv = document.getElementById('login-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('red');
}
}
};
// 发送请求数据,根据后端接收参数格式调整
xhr.send(`username=${username}&password=${password}`);
});
// 获取注册按钮并添加点击事件
const registerButton = document.getElementById('register-button');
registerButton.addEventListener('click', function () {
const username = document.getElementById('register-username').value;
const password = document.getElementById('register-password').value;
const confirmPassword = document.getElementById('register-confirm-password').value;
// 简单验证密码是否一致,实际中可加强验证逻辑
if (password!== confirmPassword) {
const errorMessageDiv = document.getElementById('register-error-message');
errorMessageDiv.textContent = '两次密码不一致';
errorMessageDiv.classList.add('red');
return;
}
// 创建Ajax请求对象
const xhr = new XMLHttpRequest();
xhr.open('POST', '?act=register', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
if (response.success) {
// 注册成功,显示蓝色背景白色字提示
const errorMessageDiv = document.getElementById('register-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('blue');
} else {
// 显示错误消息,红色背景白色字
const errorMessageDiv = document.getElementById('register-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('red');
}
}
};
// 发送请求数据
xhr.send(`username=${username}&password=${password}`);
});
// 获取找回密码按钮并添加点击事件
const forgotButton = document.getElementById('forgot-button');
forgotButton.addEventListener('click', function () {
const username = document.getElementById('forgot-username').value;
const email = document.getElementById('forgot-email').value;
// 创建Ajax请求对象
const xhr = new XMLHttpRequest();
xhr.open('POST', '?act=forgot-password', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
if (response.success) {
// 找回密码成功,显示蓝色背景白色字提示
const errorMessageDiv = document.getElementById('forgot-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('blue');
} else {
// 显示错误消息,红色背景白色字
const errorMessageDiv = document.getElementById('forgot-error-message');
errorMessageDiv.textContent = response.message;
errorMessageDiv.classList.add('red');
}
}
};
// 发送请求数据
xhr.send(`username=${username}&email=${email}`);
});
};
</script>
</head>
<body>
<div class="page-container">
<div class="tab-container">
<button class="tab active" data-target="login-section">登录</button>
<button class="tab" data-target="register-section">注册</button>
<button class="tab" data-target="forgot-password-section">找回密码</button>
</div>
<div class="content-container">
<!-- 登录部分 -->
<div class="section active" id="login-section">
<h2>登录</h2>
<input type="text" id="login-username" placeholder="用户名">
<input type="password" id="login-password" placeholder="密码">
<button id="login-button">登录</button>
<div id="login-error-message" class="error-message"></div>
</div>
<!-- 注册部分 -->
<div class="section" id="register-section" style="display: ;">
<h2>注册</h2>
<input type="text" id="register-username" placeholder="用户名">
<input type="password" id="register-password" placeholder="密码">
<input type="password" id="register-confirm-password" placeholder="确认密码">
<button id="register-button">注册</button>
<div id="register-error-message" class="error-message"></div>
</div>
<!-- 找回密码部分 -->
<div class="section" id="forgot-password-section" style="display: ;">
<h2>找回密码</h2>
<input type="text" id="forgot-username" placeholder="用户名">
<input type="email" id="forgot-email" placeholder="邮箱地址">
<button id="forgot-button">找回密码</button>
<div id="forgot-error-message" class="error-message"></div>
</div>
</div>
</div>
</body>
</html>

 

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

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

相关文章

uniapp首页样式,实现菜单导航结构

实现菜单导航结构 1.导入字体图标库需要的文件 2.修改引用路径iconfont.css 3.导入到App.vue中 <style>import url(./static/font/iconfont.css); </style>导航区域代码 VUE代码 <template><view class"home"><!-- 导航区域 --><…

解析客服知识库搭建的五个必要性

在当今竞争激烈的商业环境中&#xff0c;客服知识库的搭建已成为企业提升服务质量、优化客户体验的重要手段。一个完善的客服知识库不仅能帮助企业高效管理客户服务流程&#xff0c;还能显著提升客户满意度和忠诚度。以下是搭建客服知识库的五个必要性&#xff1a; 1. 提升服务…

淘宝Vision Pro:革新购物体验的沉浸式未来

引言 简要介绍淘宝Vision Pro版的背景,包括它在美区AppStore的发布及WWDC上的展示。阐述本文的目的:为读者提供一个全面的功能概览与设计背后的思考。设计原则 列出并简要解释5条设计原则(熟悉、直观、真实、实用、易用)。说明这些原则如何指导整个产品设计过程。核心功能详…

【CSS in Depth 2 精译_062】第 10 章 CSS 中的容器查询(@container)概述 + 10.1 容器查询的一个简单示例

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 ✔️ 10.1.1 容器尺寸查询的用法 ✔️ 10.2 深入理解容器10.3 与容器相关的单位10.4 容器样式查询的用法10.5 本章小结 文章目录 第 10…

HCIE:详解OSPF,从基础到高级特性再到深入研究

目录 前言 一、OSPF协议基本原理 简介 基本原理 OSPF路由器类型 OSPF网络类型 OSPF报文类型和封装 OSPF邻居的建立的维护 DR和BDR的选举 伪节点 LSDB的更新 OSPF的配置 二、OSPF的高级特性 虚连接&#xff08;Virtual-Link&#xff09; OSPF的LSA和路由选择 OSPF…

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐&#xff0c;生成mp3文件的时候需要等待&#xff0c;需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址&#xff1a;https://unity.com/download 安装打开后如图所示&#xff1a; 2.下载 VRChat 官方推荐版本的 Unity 跳转界面&#xff08;VRChat 官方推荐页面&#xff09;&#xff1a;https://creators.vrchat.com/sdk/upgrade/…

ollama部署bge-m3,并实现与dify平台对接

概述 这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。 (看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。) 这不,为了实验在windows上docker里运行pytorch,把docker重装了。 dify也得重装: Dify基…

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…

Lesson 10 GNN

听课&#xff08;李宏毅老师的&#xff09;笔记&#xff0c;方便梳理框架&#xff0c;以作复习之用。本节课主要讲了生成式对抗网络&#xff08;GNN&#xff09;。 目录 Generation Network as Generator 到目前为止&#xff0c;我们学习到的是类似于函数的network&#xf…

Scala入门基础(20)数据集复习拓展

一.Stack栈二.Queue 队列 一.Stack栈 Stack:栈&#xff0c;特殊的结构。它对元素的操作是在头部&#xff1a;栈顶 先进后出的队列。pop表示取出&#xff0c;push表示在栈中添加元素 二.Queue 队列 Queue 队列;先进先出.enqueue入队&#xff0c;dequeue出队。

Ubuntu20.04运行DM-VIO

目录 环境配置非ROS环境运行编译运行结果图 ROS环境参考 环境配置 Ubuntu20.04 将项目中Cmakelists.txt中C 和 opencv版本修改下 C 使用 14 opencv使用4 非ROS环境运行 编译 按照官网即可 cd dm-vio mkdir build cd build cmake .. make -j运行 DM-VIO给的命令是 bin/d…

TDengine 签约深圳综合粒子,赋能粒子研究新突破

在高能物理和粒子研究领域&#xff0c;实验装置的不断升级伴随着海量数据的产生与处理。尤其是随着大湾区综合性国家科学中心的建设步伐加快&#xff0c;深圳综合粒子设施研究院&#xff08;以下简称“研究院”&#xff09;作为承载“双区驱动”战略的重要科研机构&#xff0c;…

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网&#xff0c;根据自己的操作系统下载对应的Apifox安装包&#xff0c;我是windows系统所以下载的是windows版。 下载 默认仅为我安装&#xff0c;点击下一…

(C语言) 8大翻译阶段

(C语言) 8大翻译阶段 文章目录 (C语言) 8大翻译阶段⭐前言&#x1f5c3;️8大阶段&#x1f5c2;️1. 字符映射&#x1f5c2;️2. 行分割&#x1f5c2;️3. 标记化&#x1f5c2;️4. 预处理&#x1f5c2;️5. 字符集映射&#x1f5c2;️6. 字符串拼接&#x1f5c2;️7. 翻译&…

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

Spring Boot拦截器(Interceptor)详解

拦截器Interceptor 拦截器我们主要分为三个方面进行讲解&#xff1a; 介绍下什么是拦截器&#xff0c;并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能 1. 快速入门 什么是拦截器&#xff1f; 是一种动态拦截方法调用的机制&#xff…

使用zabbix监控k8s

一、 参考文献 小阿轩yx-案例&#xff1a;Zabbix监控kubernetes云原生环境 手把手教你实现zabbix对Kubernetes的监控 二、部署经验 关于zabbix监控k8s&#xff0c;总体来说是分为两块内容&#xff0c;一是在k8s集群部署zabbix-agent和zabbix- proxy。二是在zabbix进行配置。…

GitCode 平台设置访问令牌 从而git仓库(附pycharm创建版本控制项目)

GitCode 背靠CSDN搞了国产的git平台&#xff0c;但在实际使用过程中&#xff0c;我直接感受就是坑爹&#xff01;在查找用户令牌&#xff08;账号密码&#xff09;这一基本功能上&#xff0c;因为是csdn直接登录跳转过去的用户令牌&#xff0c;没有设置过密码&#xff0c;默认就…

神经网络入门实战:(五)本地数据集的读取,以及从pytorch官网下载数据集的操作

本地带标签图片数据集的读取 代码里面的注释写的都比较清楚&#xff0c;也有拓展的部分&#xff0c;这里就不详细列出。 from torch.utils.data import Dataset # 从torch.utils.data导入Dataset类&#xff0c;用于创建自定义的数据集类 from PIL import Image #引入PIL库中的I…