如何使用ajax表单验证,使用ajax进行异步表单验证

2023-05-16

在传统的Web应用中,用户的身份验证是通过向服务器提供表单,服务器对表单中的用户信息进行验证,然后返回验证的结果,在这样的处理方式中,客户端必须等到服务器返回处理结果才能进行别的操作,而且在这个过程中还会刷新整个页面。

在Ajax的处理方式中,可以把用户的信息通过XMLHttpRequest对象异步发送给服务器,在服务器完成对用户身份信息的处理后,把处理结果通过XMLHttpRequest对象返回用户,以异步的方式在不刷新页面的情况下完成对用户身份的验证。

利用Ajax实现对登录数据的验证。假设正确的用户名为“张三”,正确的密码为“123456”。在用户登录的时候判断用户名和用户密码是否正确,如果正确则跳转到欢迎页面;否则,在登录页面提示错误。

表单页面login.html

请输入用户名:

请输入密码:

点击“登录”按钮时,调用fromCheck()函数使用ajax异步验证用户信息。

function fromCheck(){

var userName = document.getElementById("userName").value;

var userPwd = document.getElementById("userPwd").value;

var url ="/ajax/check"; //ajax向该处发出检查用户信息的请求

var params = "userName="+userName+"&userPwd="+userPwd;

var method = "POST";

sendRequest(url,method,params,callBack);

}

在fromCheck()方法中的sendRequest()方法是对ajax发送异步请求的封装。封装ajax的完整代码如下:

var xmlHttpRequest = null;

//创建XMLHttpRequest对象

function createXHR(){

try{

xmlHttpRequest = new XMLHttpRequest();

}catch(e1){

//兼容不同版本的IE浏览器

var _msXmlHttp = new Array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0",

"Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0",

"Msxml2.XMLHTTP","Microsoft.XMLHTTP");

for(int i=0;i<_msxmlhttp.length>

try{

xmlHttpRequest = new ActiveXObject(_msXmlHttp[i]);

if(xmlHttpRequest!= null)break;

}catch (e2){}

}

}

if(xmlHttpRequest == null){

alert("不能创建AJAX对象");

}

}

/**

* 发送客户端请求

* url:请求的地址

* method:请求的方法,GET或POST请求

* params:传递到服务端的参数

* callback:响应函数

*/

function sendRequest(url,method,params,callback) {

createXHR();

if(!xmlHttpRequest)return false;

xmlHttpRequest.onreadystatechange = callback;

if(method === "GET"){

xmlHttpRequest.open(method,url+"?"+params,true);

xmlHttpRequest.send(null);

}

if(method === "POST"){

xmlHttpRequest.open(method,url,true);

xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlHttpRequest.send(params);

}

}

在sendRequest()方法中method有两种方式"GET"和"POST",需要注意这两种方式向服务器传递参数方式的不同。

GET请求时,参数是通过"?"拼接在url后面。

xmlHttpRequest.open(method,url+"?"+params,true);

POST请求的参数是通过send()传递的。同时,POST请求还需要指定请求头的"Content-Type"为"application/x-www-form-urlencoded",否则服务器无法接受到请求的数据。

xmlHttpRequest.open(method,url,true);

xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlHttpRequest.send(params);

在sendRequest()方法中callback参数为响应函数,该函数为用户定义的在ajax接受到服务器的响应后要去干什么。在这个例子中,我们希望在接受到"error"的响应信息时,在登录页面中

//ajax响应的处理函数

function callBack() {

if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){

var info = xmlHttpRequest.responseText;

if(info === "error"){

document.getElementById("showMsg").innerText="用户名或密码错误!";

}else{

//info === "success"

window.location.href="/ajax/welcome";//访问欢迎页面

}

}

}

欢迎页面welcome.html

Login Success ! Welcome

controller层

服务器端用Spring Boot写。

@Controller

@RequestMapping("ajax")

public class AjaxController {

/**

* 进入登录页面

* */

@GetMapping("/login")

public String login(){

return "login";

}

/**

* 用户登录信息检查

* */

@RequestMapping(value = "/check",method = RequestMethod.POST)

@ResponseBody

public void loginCheck(HttpServletRequest request,HttpServletResponse response)

throws IOException{

response.setContentType("text/html;charset=UTF-8");

request.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

String userName = request.getParameter("userName");

String userPwd = request.getParameter("userPwd");

if(!"张三".equals(userName) || !"123456".equals(userPwd)){

out.print("error"); // 失败

}else{

out.print("success"); //成功

}

}

/**

* 进入欢迎页面

* */

@GetMapping("/welcome")

public String welcomePage(){

return "welcome";

}

}

运行结果

登录成功

31b426cec09d

微信图片_20190712214630.png

31b426cec09d

微信图片_20190712214621.png

登录失败

31b426cec09d

微信图片_20190712214602.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用ajax表单验证,使用ajax进行异步表单验证 的相关文章

  • 最值交换c语言oj,九度OJ 1053:互换最大最小数 (基础题)

    时间限制 xff1a 1 秒 内存限制 xff1a 32 兆 特殊判题 xff1a 否 提交 xff1a 6613 解决 xff1a 2676 题目描述 xff1a 输入一个数n xff0c 然后输入n个数值各不相同 xff0c 调换数组中
  • mac安装anaconda_Anaconda3安装后 无法在终端使用 conda命令的解决方法

    好久不用Anaconda3 xff0c 突然没办法在终端中使用conda命令 xff0c 报错是 command not found 尝试搜索了一些解决方法 xff0c 有的虽然奏效但是退出Terminal再打开后命令再次失效 最终使用以下
  • python获取windows进程cpu占用率_用Python计算进程cpu使用率

    经过进一步的研究 xff0c 我找到了解决办法 在 因此 xff0c 为了获得进程cpu使用率的百分比 xff0c 我们需要一些参数 xff1a 1 系统时间 为了计算这个 xff0c 我们需要用户模式时间 xff0c 内核模式时间和 空闲
  • Proxmox生产实践点滴:硬件篇

    总体上来说 xff0c Proxmox VE并不挑剔硬件 xff0c 其目前使用的Linux内核来自ubuntu 16 04 LTS发行版 xff0c 内核版本号为4 4 x 应该算是相当新的了 xff0c 确保对新硬件的兼容性 xff0c
  • Python基础——面向对象

    面向过程适合思考小规模事情 面向对象适合思考大规模的事情 思维 xff1a 先判断事情是简单的 小规模的 xff0c 还是复杂 的 xff0c 大规模的 xff0c 然后选择不同的思维方式 遇到复杂问题 xff0c 先从问题中找名词 xff
  • fdisk找不到u盘_U盘装电脑系统两个常见问题及解决方法

    如今电脑装机 xff0c 不管是电脑店还是用户自己装机 xff0c 估计95 以上是选用U盘一键装机 xff0c 网上流行的老毛桃 大白菜 小白等等很多 xff0c 这些系统大同小异 xff0c 运行装机系统 xff0c 然后根据自己需要
  • c++ gdi修改dpi_SV DPI-C接口学习心得

    1 是什么 xff1f xff1f DPI Direct Programming Interface xff0c 全称直接编程接口 xff0c 是SV与其它语言 C C 43 43 交互的接口 xff0c 基本上是唯一接口了 2 为什么 x
  • linux系统盘快照回滚,使用Btrfs对Linux系统进行快照回滚方法

    Btrfs 又被称为 Butter FS Better FS 或 B Tree FS 是由 Oracle 于 2007 年开始设计 开发的一个现代文件系统 它于 2009 年开始便被合并入 Linux 2 6 29 内核 Btrfs 基于
  • vi删除选中内容_linuxvi怎么编辑器删除多行与复制命令

    vi vim是什么 Linux世界几乎所有的配置文件都是以纯文本形式存在的 xff0c 而在所有的Linux发行版系统上都有vi编辑器 xff0c 因此利用简单的文字编辑软件就能够轻松地修改系统的各种配置了 xff0c 非常方便 vi就是一
  • ios sdk 穿山甲_GitHub - ArthurKnight/flutter_ad_pangolin_plugin: iOS flutter 穿山甲插件

    Pangolin 前言 在使用本插件前请认真 xff0c 仔细阅读穿山甲官方文档 本插件将尽量保留SDK内容和各API相关内容 xff0c 如出现在官方文档以外报错信息可以留言issue 或通过文末联系方式联系作者 注明来意 针对你可能会遇
  • @Async 使用

    64 Async 用于异步式执行场景 作用于类和方法上 方法上使用较为常用 在Application类上加上 64 EnableAsync启动异步注解 然后在需要异步的方法或类上加上 64 Async就可以异步执行了 64 Async 使用
  • 七大设计原则

    1 开闭原则 xff08 Open Closed Principle xff0c OCP xff09 尽量通过扩展来面对需求的更改或者系统的变化 xff0c 尽量不要对原有内容修改 xff08 对新增开 xff0c 对修改闭 xff09 优
  • java 多线程的6种状态

    关于线程的生命周期 xff0c 网上书上说法不一 xff0c 难以统一 xff0c 本篇做一个总结 xff1a java lang Thread State 枚举类中定义了六种线程的状态 xff0c 可以调用线程Thread中的getSta
  • @Configuration 注解

    类名上加如入 64 Configuration 注解使得该类成为Spring的配置类 xff0c Spring在初始化时会扫描并加载该类 xff0c 通常搭配 64 Bean注解使用
  • Proxmox监视器

    Proxmox使用KVM虚拟机技术 在KVM虚拟机里 xff0c 所有部件都不是真实的物理部件 xff0c 而是用软件模拟出来的 CPU 内存 硬盘 网卡等等 xff0c 全部都经过了Qemu软件包装 用户一方面可以利用Qemu软件提供的监
  • @Bean注解

    64 Bean注解加在方法上使得对象交给Spring容器管理 xff0c 返回对类型为交给Spring容器管理的类名 xff0c 方法名为IoC的id xff0c 也可以指定id span class token comment 指定该cl
  • MarkDown基本语法

    标题 xff1a 一级标题为 xff0c 二级标题为 xff0c 以此类推 xff0c 最多6级标题 注意 后面有个空格 字体 xff1a 加粗 加粗字体 实际效果 xff1a 加粗字体 斜体 斜体 实际效果 xff1a 斜体 斜体加粗 斜
  • 没有dpkg命令_ffsend:在命令行中通过 FireFox Send 分享文件 | Linux 中国

    在过去我们已经写了多篇有关安全分享这个话题的文章 xff0c 今天我们甚至还将继续讨论这个话题 xff0c 我们将介绍名为 ffsend 的工具 Vinoth Kumar Linux 用户偏爱使用 scp 或 rsync 来进行文件或目录的
  • python下载视频you_python 视频下载神器(you-get)

    you get是github上python的一个开源库 https github com soimort you get xff0c 使用you get你只需要取得视频所在网页链接地址就可以很轻松的下载下来 xff0c 目前you get所
  • 如何正确运用计算机,如何正确使用电脑

    现在的电脑已经成为生活中不可或缺的一部分了 xff0c 那么如何正确使用电脑比较好呢 怎么样做才能使我们的电脑用久之后还能完美如新呢 以下是CN人才小编为您收集整理提供到的如何正确使用电脑 xff0c 欢迎阅读参考 xff0c 希望对你有所

随机推荐