Ajax详解及其案例分析

2019-09-14 07:07:01王冬梅

web.xml文件代码。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>ActionServlet</servlet-name>
    <servlet-class>web.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ActionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

my.js文件代码。

function getXhr() {
  var xhr = null;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = new ActiveXObject("Microsoft.XMLHttp");
  }
  return xhr;
}

 使用Ajax校验用户名

4.1 问题

实现注册功能中,用户名是否可用的校验。

4.2 方案

填写完用户名后,通过点击后面的按钮进行验证。并显示服务器返回的说明信息。

4.3 步骤

步骤一: 新建regist.html文件

<body>
    <!-- 验证注册信息中的用户名是否可用 -->
    <form action="" method="post">
      <fieldset>
        <legend>
          注册信息
        </legend>
        用户名:
        <input name="uname" id="uname" />
        <input type="button" value="检查一下吧" onclick="check_name()" />
        <span id="name_msg" style="color: red;"></span>
        <br />
        <br />
        <input type="submit" value="注册" />
      </fieldset>
    </form>
  </body>

步骤二: 编写check_name()方法

<script type="text/javascript">
      function check_name(){        
        var xhr = getXhr();      
        xhr.onreadystatechange=function(){
          if(xhr.readyState==4 && xhr.status==200){
            document.getElementById("name_msg")
                .innerHTML = xhr.responseText;
          }
        };
        xhr.setRequestHeader('content-type',
          'application/x-www-form-urlencoded');
       xhr.open("post","check_name.do",true);
        document.getElementById("name_msg")
                .innerHTML="正在检查。。。";
        var uname = document.getElementById("uname");
        xhr.send("uname="+uname.value);
      }  
    </script>

document.getElementById(“name_msg”).innerHTML=“正在检查“;这行代码在服务器还没有返回信息之前,为用户提供良好的交互体验。

步骤三: 修改ActionServlet.java文件

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ActionServlet extends HttpServlet {

  public void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取请求资源路径
    String uri = request.getRequestURI();
    String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
    if (path.equals("/get_text")) {// get请求
      out.println("get请求-服务器返回的数据");
    } else if (path.equals("/post_text")) {// post请求
      String name = request.getParameter("uname");
      System.out.println(name);
      out.println("又来了一次的" + name);
    } else if (path.equals("/check_name")) {// 检查用户名
      String name = request.getParameter("uname");
      // 模拟网络延迟的操作
      if (1 == 1) {
        try {
          Thread.sleep(6000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      System.out.println(name);
      if ("Luffy".equals(name)) {
        out.println("该用户名不可用");
      } else {
        out.println("可以使用!");
      }
    }
    out.close();
  }

}