AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

       AJAX 是一种用于创建快速动态网页的技术。其核心是 JavaScript 对象 XMLHttpRequest。该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术。简而言之,XMLHttpRequest使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。

       通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。
    
       试想如果在注册时,提交了注册信息,等了几秒后页面重载了,结果弹出一个提示框告诉你“用户名已被使用”,那将是很令人恼火的一件事。所以在这里,使用AJAX实现异步请求,即可在不重载页面的情况下实现与数据库的通讯。

创建XMLHTTPRequest对象
      使用javascript在html页面中创建XMLHTTPRequest对象,实现AJAX异步请求:
     
  1. <span style="font-size:14px;">       var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  2. xmlhttp.open("POST", "AJAXTest.ashx?" + "i=5&j=10", true);
  3. xmlhttp.onreadystatechange = function ()
  4. {
  5. if (xmlhttp.readyState == 4)
  6. {
  7. if (xmlhttp.status == 200)
  8. {
  9. alert(xmlhttp.responseText);
  10. }
  11. else
  12. {
  13. alert("AJAX服务器返回错误!");
  14. }
  15. }
  16. }
  17. xmlhttp.send();
  18. </span>

var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); //创建XMLHTTP对象,考虑兼容性

xmlhttp.open("POST", "AJAXTest.ashx?" + "i=5&j=10", true); //“准备”向服务器的GetDate1.ashx发出Post请求(GET可能会有缓存问题)。这里还没有发出请求。

readyState == 4 表示服务器返回完成数据了。之前可能会经历2(请求已发送,正在处理中)、3(响应中已有部分数据可用了,但是服务器还没有完成响应的生成)

注意:    不要以为if (xmlhttp.readyState == 4) 在send之前执行就觉得不对, xmlhttp.send(); 这时才开始发送请求。这时才开始发送请求后不等服务器返回数据,就继续向下执行,所以不会阻塞,界面就不卡了,这就是AJAX中“A”的含义“异步”。

AJAX的封装

在实际项目开发中,会有多处用到AJAX异步请求,可是创建对象代码这么长,复制粘贴都嫌麻烦,而且还会影响代码的观赏性,所以需要将AJAX进行封装。将其封装成js功能文件,并在网页中导入即可进行引用。
        
        简单AJAX封装后代码:

  1. <span style="font-family:Times New Roman;font-size:14px;">         function ajax(url,onsuccess,onfail)
  2. {
  3. var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  4. xmlhttp.open("POST", url, true);
  5. xmlhttp.onreadystatechange = function ()
  6. {
  7. if (xmlhttp.readyState == 4)
  8. {
  9. if (xmlhttp.status == 200)
  10. {
  11. onsuccess(xmlhttp.responseText);//成功时逻辑操作
  12. }
  13. else
  14. {
  15. onfail(xmlhttp.status);//失败是逻辑操作
  16. }
  17. }
  18. }
  19. xmlhttp.send(); //这时才开始发送请求
  20. }</span>

封装完成后,我们可以开始写登陆判断代码(我是用的是.net):
       首先,创建一个html页login.htm以及ashx一般处理程序userhandle.ashx,请求的url中带上一个action参数,在一般处理程序中对请求进行处理。

  1. function Submit1_onclick() {
  2. var name = document.getElementById("name").value;
  3. var psw = document.getElementById("psw").value;
  4. if (psw != "" && name != "") {
  5. //调用AJAX
  6. ajax("../userhandle.ashx?operate=login&userName=" + name + "&psw=" + psw, function (resText) {
  7. if (resText == "fail") {
  8. alert("用户名或密码错误!");
  9. return false;
  10. }
  11. else {
  12. document.write(resText);
  13. }
  14. })
  15. }
  16. else {
  17. alert("请输入完整登陆信息!");
  18. return false;
  19. }
  20. }

在一般处理程序中接到请求动作,判断并执行相关查询,返回一个字符串,前台页面接到后,判断并执行相应功能。

  1. public void login(HttpContext context)
  2. {
  3. userBLL ub = new userBLL();
  4. string userName = context.Request["userName"];
  5. string userPsw = context.Request["psw"];
  6. bool b = ub.Login(userName, userPsw);//封装好的bll层方法,判断用户名密码是否正确
  7. if (b == true)
  8. {
  9. context.Session["Name"] = userName;
  10. context.Session["role"] = "user";
  11. context.Response.Write("success");
  12. }
  13. else
  14. {
  15. context.Response.Write("fail");
  16. }
  17. }

服务器判断完后,将success或者fail发送到客户端。这样一个使用AJAX异步请求实现登陆就完成了。

至于注册是判断用户名,我就只粘贴上来:

  1. function check() {
  2. var userName = document.getElementById("Text1").value;
  3. if (userName == "" || userName == null) {
  4. document.getElementById("nameMeg").style.color = "red";
  5. document.getElementById("nameMeg").innerHTML = "用户名为6-10位英文或数字";
  6. }
  7. else {
  8. ajax("../userhandle.ashx?operate=checkName&userName=" + userName, function (resText) {
  9. if (resText == "forbid") {
  10. document.getElementById("nameMeg").style.color = "red";
  11. document.getElementById("nameMeg").innerHTML = "用户名含有非法词语";
  12. } else if (resText == "already have") {
  13. document.getElementById("nameMeg").style.color = "red";
  14. document.getElementById("nameMeg").innerHTML = "用户名已被使用";
  15. } else {
  16. document.getElementById("nameMeg").style.color = "green";
  17. document.getElementById("nameMeg").innerHTML = "可以使用";
  18. }
  19. })
  20. }
  21. }

用AJAX实现页面登陆以及注册用户名验证的更多相关文章

  1. 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...

  2. vue 做登陆页面 ( 登陆成功后去掉注册和登陆按钮 显示用户名)

    1.当登陆成功  显示用户名且去掉登陆和注册按钮 2.data里声明  后  就在登陆的方法里调用啦 下面说一下登陆的方法. 1.登陆的按钮代码在第一张图片里 2.登陆的弹出框 3.方法 ps:另一种 ...

  3. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  4. 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)

    其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...

  5. wex5 教程 之 图文讲解 登陆,注册,页面跳转

    视频教程地址:http://v.youku.com/v_show/id_XMTc3OTE0Nzg0NA==.html 效果预览: 登陆页面   首页用windowContainer装载 注册页面 登陆 ...

  6. ajax实现注册用户名时动态显示用户名是否已经被注册(1、ajax可以实现我们常见的注册用户名动态判断)(2、jquery里面的ajax也是类似我们这样封装了的函数)

    ajax实现注册用户名时动态显示用户名是否已经被注册(1.ajax可以实现我们常见的注册用户名动态判断)(2.jquery里面的ajax也是类似我们这样封装了的函数) 一.总结 1.ajax可以实现我 ...

  7. Ajax案例-基于HTML,以GET或POST方式,检查注册用户名是否在数据库中已存在

    08_register.jsp <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTY ...

  8. Django项目:CRM(客户关系管理系统)--52--43PerfectCRM实现AJAX全局账号登陆

    # gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...

  9. php登陆与注册

    登陆页面 <body><h1>登录页面</h1><form action="./dengluchuli.php" method=" ...

随机推荐

  1. 【转】C#中静态方法和非静态方法的区别

    源地址:https://www.cnblogs.com/amoshu/p/7477757.html 备注:静态方法不需要类的实例化就能调用,因为它是一直保存在内存中,不像非静态方法一样要放在实例化类时 ...

  2. [Swift]八大排序算法(五):插入排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  3. 关于logging的那些坑

    python的logging日志记录模块非常强大,使用也很简单,但是特别容易出各种意外状况,打印各种出乎意料的log.最近对logging的一些原理进行了学习,再此做个记录,以备忘. 首先全面的了解一 ...

  4. [JSOI2007]麻将 模拟 BZOJ1028

    题目描述 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张. 在麻将中,通常 ...

  5. jquery 中 $('div','li')是什么意思?

     Javascript 专业回答   2013-07-18 10:59 这个写法没有错误,而且那个人跟你说的也没错,是选择li里面所有div 前面几位都学艺不精,都说错了 要搞清楚$('div','l ...

  6. Linux下指定线程的名字

    为了能方便的区分一个进程中的每个线程,可以通过prctl()给每个线程取个名字.这样在会创建多个线程的程序执行过程中,就能知道一个pid或tid对应的是哪个线程,对调试程序有一定帮助. prctl是个 ...

  7. ZOJ - 3623 完全背包变种

    题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #in ...

  8. Java正则表达式-捕获组

    private Set<String> getCodes(String s) { Set<String> resultSet = new HashSet<>(); ...

  9. async中series的实现 javascript构件

    //同步流程 var series=function(arr){ function async(i){ arr[i](function(){ if(1+i<arr.length){ async( ...

  10. 【网络】EIGRP负载均衡、手工汇总、泄露明细、安全认证

    基于6.6.6.6/24访问13.1.1.1/24进行负载均衡实例图 一.等价负载均衡 等价负载均衡前,R5路由器背后的6.6.6.6/24访问R1的13.1.1.1/24, 从15.1.1.0/24 ...