当前位置: 首页 > news >正文

ajax的登录页面,发送post方式

	<style>
		form{
			position: relative;
		}
		span{
			position: absolute;
			color:red;
			display: none;
		}
	</style>
</head>
<body>
	**<!-- 
	 登录中,一般都会涉及到form表单,
	 但是要注意的是,form表单会自带有提交事件
	 如果我们需要就可以把这个默认事件阻止,
	 在form标签里,button标签等价于<input type='submit'>
	 <form action="" method="post">
	 	<input type="submit" value=""/>
	 </form>	 -->**
	<form>
		<span>用户名或者密码错误</span>
		</br>
		<laber>用户名:</laber><input type="text" class='username' />
		</br>
		<laber>密码:</laber><input type="text" class='password' />
		</br>
		<button>登录</button>
	</form>
	<!-- 
	  使用前后端分离的方式,使用ajax的方式发送请求,不是表单的自动提交
	  1 方式一:可以使用form表单的提交方式
	    方式二:可以使用button按钮的提交方式
	  2 获取input元素的信息
	  3 验证信息的格式,是否符合要求。表单验证
	  4 发送一个post的请求方式 暗文发送,相对于get安全
	    ajax发送到后端验证 4个步骤
	  5 根据后端返回的信息,给客户提醒,格式正确
	    正确就跳转页面 ,错误就从新填写
	  -->
	<script type="text/javascript">
		// 想要操作谁就要先获取这个元素
		let nameIpt = document.querySelector('.username')
		let passIpt = document.querySelector('.password')
		let errorInfo=document.querySelector('span')
		// 表单的提交事件
		// 绑定一个事件用来获取用户输入的内容
		// 1 表单的提交事件
		var form = document.querySelector('form') //获取form的表单元素
		form.onsubmit = function(e) { //form 表单的提交事件,当表单提交的时候就会触发
			// ajax提交方式我们要考虑一下兼容问题
			e = e || window.event
			// 因为涉及到form表单的自动提交,所以我们要阻止默认行为
			e.preventDefault()
			// console.log('提交之前,先打印')
			
			// 2 获取完元素后句可以得到里面的值信息
			let uname = nameIpt.value
			let upass = passIpt.value
			// console.log(uname,upass)
			
			// 3验证格式的信息是否符合要求
			// 非空验证 和 格式验证(正则)
			if (uname === '' || upass === '') {
				prompt('用户名或密码为空,请填写完整信息')
				return //直接阻止,不在运行后边的代码
			}
			// if(){在做一个正则的验证uname和upass的填写方式
			// }
			// 4 发送请求
			let url = ''
			var xhr = new XMLHttpRequest()
			xhr.open('post', url) //post 请求要有请求头
			xhr.onload = function() {
				console.log(JSON.parse(xhr.responseText))
				// 一般为了方便,后端也会也成JSON格式的信息,我们前端也用JSON,就可以解析后端的信息值了
				var res = JSON.parse(xhr.response)
				// 根据后端给的响应,在这里判断他们的信息值
				if (res.code === 0) { //代表失败
					// 登录失败就给提示
					errorInfo.style.display='block'
				} else {
					// 成功就跳转页面
					window.location.href = '跳转的地址'
				}
			}
			xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded') //请求头
			xhr.send(`username=${uname}&password=${upass}`) //发送请求到后端验证
		}
	</script>


	<!-- 	  
	  <script type="text/javascript">
	  	// button按钮的点击事件
		var btn=document.querySelector('button')//获取form表单里的button按钮
		btn.onclick=function(e){
			// 兼容问题
			e=e||window.event 
			// 阻止默认时间
			e.preventDefault()
			console.log('打印')
		}
	  </script> -->
</body>

相关文章:

  • AHK 中 = 和 == 等比较运算符的用法
  • nodejs的简单分析理解
  • NPM的操作步骤
  • Zabbix监控Windows主机
  • promise解决回调地狱的方法之一
  • HTML5的兼容性测试
  • 为了Cisco UC,36年来家中第一次安装固话
  • 链式调用和解决回调地狱的终极解决方法async,await
  • jquery的使用
  • 探究JVM——垃圾回收
  • jQuery的节点操作
  • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
  • jQuery获取元素尺寸
  • ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
  • 浅谈利用SQLite存储离散瓦片的思路和实现方法
  • #Java异常处理
  • .pyc 想到的一些问题
  • canvas 高仿 Apple Watch 表盘
  • conda常用的命令
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • js面向对象
  • React16时代,该用什么姿势写 React ?
  • Spark RDD学习: aggregate函数
  • spring + angular 实现导出excel
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 第2章 网络文档
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 对象管理器(defineProperty)学习笔记
  • 高度不固定时垂直居中
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端学习笔记之观察者模式
  • 用Python写一份独特的元宵节祝福
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ###项目技术发展史
  • (1)Android开发优化---------UI优化
  • (Java)【深基9.例1】选举学生会
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .net core 控制台应用程序读取配置文件app.config
  • .net core 连接数据库,通过数据库生成Modell
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • /var/lib/dpkg/lock 锁定问题
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • []我的函数库
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians