Ajax介绍

Ajax,全称即Asynchronous javvScript And Xml,指异步JavaScript及xml,不是一种新的编程语言,而是一种用于

创建更好以及交互性更强的web应用程序的技术,是基于JavaScript xml html css 新用法。

举个Ajax的典型例子,通过这个例子,大家应该对Ajax的概念能更加具体,之后再详细介绍一下Ajax的实现

大家应该都有这样的体验,当你在网站上进行注册时,首先输入用户名,光标移到下一行,如果账号已经存在,

入框后面会有提示出现 “此用户名已存在”。这就是常见的Ajax应用。是不是不使用Ajax就不能实现呢,并不是,我们

先尝试一下不使用Ajax来实现这个功能,看看Ajax的好处究竟在哪里,看下图代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <script type="text/javascript">
  	function checkname(){
  		var username=document.getElementById("haha").value;
  		location.href="${pageContext.request.contextPath}/servlet/checknameServlet?username="+username;
  	};
  </script>
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	
  </head>
  
  <body>
    <form>
    	<input type="text" name="username" id="haha" οnblur="checkname()"><span id="msg">${checkmsg}</span><br/>
    	<input type="password" name="psw"><br/>
    	<input type="submit" value="提交">
    </form>
  </body>
</html>
package com.qianfeng.login;

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 ChecknameServlet extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		String username=request.getParameter("username");
		if("lisi".equals(username)){
			request.setAttribute("checkmsg","该用户名已经被注册");
		}else{
			request.setAttribute("checkmsg","该用户名可以使用");
		}
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

}

这个小程序成功的实现了用户名的验证工作,本着尽量简单一点的目的,我并没有涉及数据库的查询,只是

在验证用户名的Servlet中进行了简单的验证。但是,当我将光标移出输入框时,浏览器出现了非常明显的页面跳转现

象。尽管时间非常短暂,还是让人感觉有些不适。

接下来在看一下使用Ajax进行用户名验证的过程,还是看代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/ajax.js"></script>
</head>
<script type="text/javascript">
	function checkName()
	{
		//得到用户输入的用户名
        var txt = document.getElementsByName("username")[0];
        var name = txt.value;
        
        var req = getXMLHttpRequest();//得到 XMLHttpRequest对象
        
        //定义当servlet返回结果时的处理方法
        req.onreadystatechange=function(){
        	 if(req.readyState==4 && req.status==200){
        	 	 //得到响应的数据
        	 	 var span = document.getElementById("msg");
        	 	 span.innerHTML = req.responseText;
        	 }
        };
        req.open("get","${pageContext.request.contextPath}/servlet/findNameServlet?name="+name);
        req.send(null);
	}

</script>
<body>
    <!-- 验证用户名是否存在,当文本框失去焦点时立刻验证 -->
	用户名<input type="text" name="username" οnkeyup="checkName()"><span id="msg"></span><br/>
	密码<input type="password" name="passwd"><br/>
	<input type="submit" value="注册">
</body>
</html>
package com.qianfeng.servlet;

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 FindNameServlet extends HttpServlet {


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

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//得到用户名
		String name = request.getParameter("name");
		//验证用户名是否存在
		if("lisi".equals(name)){
			out.print("<font color='red'>用户名已被注册</font>");
		}else{
			out.print("<font color='green'>( ^_^ )√</font>");
		}
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

这是使用了Ajax功能的程序,实现的原理与上面那个基本相同,但是在光标移出时,页面没有进行跳转。

我相信大家通过这个程序应该明白了Ajax的作用是什么,在这个程序中,局部的 页面进行了访问,整体的页面并没有变化,web交互更加贴心,用户的体验更加顺手,

更舒服。Ajax的细节实现十分简单,这里就不做什么详细介绍了。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值