使用Ajax验证用户名是否存在

一、什么是Ajax

【1】简介:

Ajax:(Asynchronous JavaScript And XML)
                     异步 JavaScript 及 XML
不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术,是基于JavaScript、XML、HTML、CSS新用法。
(一般都跟xml 是没有关系的)

Ajax:只刷新局部页面的技术
JavaScript:更新局部的网页
XML:一般用于请求数据和响应数据的封装
XMLHttpRequest对象:发送请求到服务器并获得返回结果
CSS:美化页面样式
异步:发送请求后不等返回结果,由回调函数处理结果(onreadystatechange)

【2】XMLHttpRequest对象 及 创建方式

JavaScript中XMLHttpRequest对象是整个Ajax技术的核心,它提供了异步发送请求的能力 
不同浏览器,甚至相同浏览器的不同版本,获取该对象的方式是不同的。
构造方法(可以将创建XMLHttpRequest 写在一个js文件中
    
    
  1. var xmlhttp;
  2. if(window.XMLHttpRequest)
  3. {// code for IE7+, Firefox, Chrome, Opera, Safari
  4. xmlhttp=newXMLHttpRequest();
  5. }
  6. else
  7. {// code for IE6, IE5
  8. xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
  9. }
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject

【3】Api详解

主要使用的方法:

【3.1】open(method,url,async) 建立与服务器的连接

 提供五个参数,但是我们常用前两个参数  
"get|post"                :请求的方式
"url?name=tom"     :请求的路径  和 携带的参数
例如:
req.open("post",
"${pageContext.request.contextPath}/CheckName?username="
+ username.value);

【3.2】send(content)  发送请求

发送请求 ,可以带参数 或 null 
分Post  和 Get 两种方式。
【1】当open(Get )时
// 设置为 null 即可
send(null); 
例子:
     
     
  1. //添加参数,以求每次访问不同的url,以避免缓存问题
  2. xmlHttp.open("get","Server.aspx?username="+ encodeURIComponent(username)
  3. +"&age="+ encodeURIComponent(age)+"&random="+Math.random());
  4. //发送请求,参数为null xmlHttp.send(null);
【2】当open(Post) 时,必须设置setRequestHeader();
//设置请求的参数
send(data);
 //必须设置,否则服务器端收不到参数
 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
例子:
      
      
  1. //不用担心缓存问题
  2. xmlHttp.open("post","Server.aspx",true);
  3. //必须设置,否则服务器端收不到参数
  4. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  5. //发送请求,要data数据
  6. xmlHttp.send(data);

区别:

1.get请求需注意缓存问题,post请求不需担心这个问题

2.post请求必须设置Content-Type值为application/x-form-www-urlencoded

3.发送请求时,因为get请求的参数都在url里,所以send函数发送的参数为null,而post请求在使用send方法时,却需赋予其参数

来源:http://www.cnblogs.com/oneword/archive/2011/06/06/2073533.html

方法名

说    明

open(method,URL,async)

建立与服务器的连接

method参数指定请求的HTTP方法,典型的值是GET或POST

URL参数指请求的地址

async参数指定是否使用异步请求,其值为true或false

send(content)

发送请求

content参数指定请求的参数

setRequestHeader(header,value)

设置请求的头信息

【3.3】事件处理器

【1】简介:
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。

可以理解为回调函数:
其中需要用的两个状态:
readyState:类型short;只读
status:类型short;只读
【2】readyState:XMLHttpRequest的状态信息  

就绪状态码

说    明

0

XMLHttpRequest对象没有完成初始化

即:刚刚创建。

1

XMLHttpRequest对象开始发送请求

调用了open方法,但还没有调用send方法。请求还没有发出

2

XMLHttpRequest对象的请求发送完成

send方法已经调用,数据已经提交到服务器,但没有任何响应

3

XMLHttpRequest对象开始读取响应,还没有结束

收到了所有的响应消息头,但正文还没有完全收到

4

XMLHttpRequest对象读取响应结束

一切都收到了

【2.1】status:HTTP的状态码 

状态码

说    明

200

服务器响应正常

400

无法找到请求的资源

403

没有访问权限

404

访问的资源不存在

500

服务器内部错误

responseText:获得响应的文本内容 ,类型String;只读【常用】
responseXML:获得响应的XML文档对象 documednt,类型Document;只读
注:就绪状态是4而且状态码是200,才可以处理服务器数据

例子:

Myjs.js   获取xmlHttpRequest 对象
   
   
  1. function getXMLHttpRequest(){
  2. var xmlhttp;
  3. if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  4. xmlhttp =newXMLHttpRequest();
  5. }else{// code for IE6, IE5
  6. xmlhttp =newActiveXObject("Microsoft.XMLHTTP");
  7. }
  8. return xmlhttp;
  9. }
index.jsp 
   
   
  1. <script type="text/javascript" src="${pageContext.request.contextPath}/Myjs.js"></script>
  2. <script type="text/javascript">
  3. window.onload = function (){
  4. // 1.创建一个 xmlhttpRequest 对象
  5. var xmlHttpRequest1 = getXMLHttpRequest();
  6. // 4.处理响应结果(执行回调函数)
  7. xmlHttpRequest1.onreadystatechange = function (){
  8. //查看服务器端响应状态
  9. //alert(xmlHttpRequest1.readyState);
  10. if(xmlHttpRequest1.readyState ==4){
  11. //查看服务器响应是否正常
  12. if(xmlHttpRequest1.status ==200){
  13. // 获取响应的文本内容
  14. alert(xmlHttpRequest1.responseText);
  15. }
  16. }
  17. }
  18. //2. 创建一个连接
  19. xmlHttpRequest1.open("GET","${pageContext.request.contextPath}/TestServlet");
  20. //3. 发送请求 ,没有参数 null
  21. xmlHttpRequest1.send(null);
  22. }
  23. </script>
servlet 
   
   
  1. publicvoid doGet(HttpServletRequest request,HttpServletResponse response)
  2. throwsServletException,IOException{
  3. //请求
  4. response.setContentType("text/html;charset=utf-8");
  5. PrintWriter writer = response.getWriter();
  6. writer.print("get 方法执行");
  7. }
测试:


案例:使用Ajax验证用户名是否存在实现步骤:

1、使用文本框的onBlur事件

2、使用Ajax技术实现异步交互

               a)创建XMLHttpRequest对象

               b)通过 XMLHttpRequest对象设置请求信息

               c)向服务器发送请求

               d)创建回调函数,根据响应状态动态更新页面

   
   
  1. <script type="text/javascript"
  2. src="${pageContext.request.contextPath}/Myjs.js"></script>
  3. <script type="text/javascript">
  4. function checkName(){
  5. //
  6. var username = document.getElementsByTagName("input")[0];
  7. // 1,获取xmlHttpRequest
  8. var req = getXMLHttpRequest();
  9. // 2,
  10. req.onreadystatechange = function(){
  11. if(req.readyState ==4){
  12. if(req.status ==200){
  13. var msg = document.getElementById("msg");
  14. if(req.responseText =="true"){
  15. //msg.innerHTML = "用户名已经存在";
  16. msg.innerHTML ="<font color='red'>用户已经存在</font>";
  17. }else{
  18. //msg.innerHTML = "可以使用";
  19. msg.innerHTML ="<font color='green'>可以使用</font>";
  20. }
  21. }
  22. }
  23. }
  24. // 3, 发送一个请求
  25. req.open("post",
  26. "${pageContext.request.contextPath}/CheckName?username="
  27. + username.value);
  28. req.send(null);
  29. }
  30. </script>
  31. </head>

  32. <body>
  33. 用户名
  34. <input type="text" name="username" onblur="checkName()"/>
  35. <span id="msg"></span>
  36. <br />密码
  37. <input type="password" name="password"/>
  38. </body>
  39. </html>
servlet 
    
    
  1. publicvoid doGet(HttpServletRequest request,HttpServletResponse response)
  2. throwsServletException,IOException{
  3. String name = request.getParameter("username");
  4. System.out.println(name);
  5. PrintWriter out = response.getWriter();
  6. if(name.equals("tom")){
  7. out.print(true);
  8. }else{
  9. out.print(false);
  10. }
  11. }
测试:

用户存在
 
可以使用


改进方式: 将在input 中写方法,改为当页面记载完成后获取字段,然后做判断。
   
   
  1. window.onload=function(){//onload 表示当前页面都加载完成后。
  2. var nameElement = document.getElementsByName("userName")[0];
  3. nameElement.onblur = function(){
  4. var name =this.value;//this等价于nameElement
  5. //创建XMLHttpRequest对象
  6. var xhr = getXMLHttpRequest();
  7. //处理结果
  8. xhr.onreadystatechange = function(){
  9. if(xhr.readyState==4){//请求一切正常
  10. if(xhr.status==200){//服务器响应一切正常
  11. //alert(xhr.responseText);//得到响应结果
  12. var msg = document.getElementById("msg");
  13. if(xhr.responseText=="true"){
  14. msg.innerHTML ="<font color='red'>用户名已存在</font>";
  15. //msg.innerText = "<font color='red'>用户名已存在</font>";
  16. }else{
  17. msg.innerHTML ="可以使用";
  18. }
  19. }
  20. }
  21. }
  22. //创建连接
  23. xhr.open("get","${pageContext.request.contextPath }/servlet/ckNameServlet?name="+name.value);
  24. //发送请求
  25. xhr.send(null);
  26. }
  27. }
  28. </script>








 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值