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. ajax登录验证-js

    1.html代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  2. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  3. Ajax登录用户名密码

    <script src="http://code.jquery.com/jquery-latest.js"></script>#引入jQuery#当点击函数 ...

  4. Django Ajax登录 防止CSRF

    什么是CSRF 维基百科: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CS ...

  5. Django 博客项目01 数据库设计与验证码校验+Ajax登录

    数据库设计 from django.db import models from django.contrib.auth.models import AbstractUser class UserInf ...

  6. 知问前端——Ajax登录

    本文,将使用Ajax登录. 一.服务器端代码 is_user.php: <?php require 'config.php'; $query = mysql_query("SELECT ...

  7. 巨蟒python全栈开发django10:ajax&&登录认证

    通过题目进行知识点回顾: 聚合查询 From django.db.models import Avg,Min,Max,F,Q,Count,Sum #查询书籍的平均值 Ret= Models.Book. ...

  8. 转:ajax的AntiForgery和Authorize 以及ajax登录例子

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ashcn2001/article/det ...

  9. 项目:jSon和Ajax登录功能

    组件化网页开发 / 步骤二 · 项目:jSon和Ajax登录功能 要熟练编写封装的$.ajax({........})

  10. 解决shiro自定义filter后,ajax登录无法登录,并且无法显示静态资源的问题

    这个问题困扰了我一天,看了下面两个文章,豁然开朗: https://www.cnblogs.com/gj1990/p/8057348.html https://412887952-qq-com.ite ...

随机推荐

  1. urlencode遇到中文编码问题

    urlencode并不会改变输入的编码格式, 默认会将中文输出为 gbk 编码, 类似的, quote 会对中文进行 gbk 编码 不过, 当遇到嵌套多层的字典时, 问题就来了, 中文会被 utf8 ...

  2. C++ Bitstream类

    从raknet上剥下来的 比较适用于前后端通讯,可以对BitStream进行二次封装,方便使用. BitStream.h: #ifndef __BITSTREAM_H #define __BITSTR ...

  3. java项目上线过程

    关于如何将Javaweb上线,部署到公网,让全世界的人都可以访问的问题.小编将作出系列化,完整的流程介绍. 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http://z ...

  4. code first提示已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭解决方法

    使用codefirst查询当然是必不可少的,但有时不小心可能很简单的查询也会导致异常. 下面用codefirst做个示例简单演示下异常发生的场景: var attendlist = db.Databa ...

  5. Linux 系统中堆栈的使用方法

    本节内容概要描述了Linux内核从开机引导到系统正常运行过程中对堆栈的使用方式.这部分内容的说明与内核代码关系比较密切,可以先跳过.在开始阅读相应代码时再回来仔细研究. Linux 0.12系统中共使 ...

  6. Spring学习(二)

    1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控 ...

  7. MFC 创建多层目录

    创建多层目录 BOOL CTestToolCtr::CreateFolder(CString strNewFolder) { /************************************ ...

  8. iOS 版本号大小比较

    NSString *num1 = @"5.2.0";    NSString *num2 = @"5.3.0"; if ([num1 compare:num2 ...

  9. Swift - 键盘弹起,遮挡输入框

    extension LoginViewController:UITextFieldDelegate { func textFieldShouldReturn(textField: UITextFiel ...

  10. ATM+购物车

    本次代码的实现用到了模块间的互相调用,这对于初学者而言有些难度,不过这也是我们必须要掌握的,在以后的大程序中,多个模块会让我们的代码看起来简洁明了,易排错 (本次代码只是简单的实现的基本的功能,其代码 ...