Ajax局部刷新(使用JS操作)

  对于在不使用Ajax的情况下,使用JS来进行局部刷新,主要有如下的几步:

    1. 得到XMLHttpRequest

    2. 使用open方法打开连接

    3. 设置请求头信息

    4. 注册onreadystatechange事件,并判断是否请求响应成功(使用readyState和status)

    5. 在请求和响应成功之后,取得服务器响应的数据,使用responseText

  对于直接使用js来自己编写,这样工作复杂,步骤多,我们可以将其进行封装好。同时还有一种更好的方式,就是使用jquery中的ajax方法。

代码:

  javascript:

	<script type="text/javascript">
		// 取得XMLHttpRequest对象,这个需要进行浏览器的判断
		function getXMLHttp() {
			try {
				// 绝大多数的浏览器
				return new XMLHttpRequest();
			} catch (e) {
				// ie游览器的判定
				// 判断ie6.0
				try {
					return new ActvieXObject("Msxml2.XMLHTTP");
				} catch (e) {
					// 判断ie5.5及其更早的ie游览器
					try {
						return new ActvieXObject("Microsoft.XMLHTTP");
					} catch (e) {
						alert("无法取得XMLHttpRequest");
						// 抛出异常信息
						throw (e);
					}
				}
			}
		}

		// 进行ajax操作,此操作必须在页面加载完成之后,进行操作
		window.onload = function() {
			// 第一步:取得username文本框和font标签的元素对象
			var userEle = document.getElementById("username");
			var fontEle = document.getElementById("msg");
			// 第二部:注册username文本框失去焦点事件
			userEle.onblur = function() {
				// 第三部:得到ajax的请求对象
				var xmlHttp = getXMLHttp();
				// 第四部:打开连接,第一个参数表示使用post方式提交;第二个参数表示提交的地址,第三个参数表示打开连接
				xmlHttp.open("POST", "<c:url value=‘/AjaxServlet‘/>?method=ifRegister", true);
				// 第五步:设置请求头信息
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				// 第六步:发送请求
				xmlHttp.send("username=" + userEle.value);
				// 第七步:判断是否请求和响应成功
				// 并给xmlHttp的onreadystatechange事件注册监听
				xmlHttp.onreadystatechange = function() {
					if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
						// 表示响应成功
						// 在此处接收ajax的响应内容
						var text = xmlHttp.responseText;
						if(text==‘n‘) {
							// 将提示信息,写到页面font标签内
							fontEle.innerHTML = "*此用户名已存在...";
						}
					}
				};
			};
		};

	</script>

  jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Ajax操作示例</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">

	<script type="text/javascript">
		// 取得XMLHttpRequest对象,这个需要进行浏览器的判断
		function getXMLHttp() {
			try {
				// 绝大多数的浏览器
				return new XMLHttpRequest();
			} catch (e) {
				// ie游览器的判定
				// 判断ie6.0
				try {
					return new ActvieXObject("Msxml2.XMLHTTP");
				} catch (e) {
					// 判断ie5.5及其更早的ie游览器
					try {
						return new ActvieXObject("Microsoft.XMLHTTP");
					} catch (e) {
						alert("无法取得XMLHttpRequest");
						// 抛出异常信息
						throw (e);
					}
				}
			}
		}

		// 进行ajax操作,此操作必须在页面加载完成之后,进行操作
		window.onload = function() {
			// 第一步:取得username文本框和font标签的元素对象
			var userEle = document.getElementById("username");
			var fontEle = document.getElementById("msg");
			// 第二部:注册username文本框失去焦点事件
			userEle.onblur = function() {
				// 第三部:得到ajax的请求对象
				var xmlHttp = getXMLHttp();
				// 第四部:打开连接,第一个参数表示使用post方式提交;第二个参数表示提交的地址,第三个参数表示打开连接
				xmlHttp.open("POST", "<c:url value=‘/AjaxServlet‘/>?method=ifRegister", true);
				// 第五步:设置请求头信息
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				// 第六步:发送请求
				xmlHttp.send("username=" + userEle.value);
				// 第七步:判断是否请求和响应成功
				// 并给xmlHttp的onreadystatechange事件注册监听
				xmlHttp.onreadystatechange = function() {
					if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
						// 表示响应成功
						// 在此处接收ajax的响应内容
						var text = xmlHttp.responseText;
						if(text==‘n‘) {
							// 将提示信息,写到页面font标签内
							fontEle.innerHTML = "*此用户名已存在...";
						}
					}
				};
			};
		};

	</script>

  </head>

  <body>
    <div align="center">
    	<h1>注 册</h1>
    	<form action="" method="post">
    		<table>
    			<tr>
    				<td>Username : </td>
    				<td>
    					<input type="text" id="username" name="username" value=""/>
    				</td>
    				<td>
    					<font size=‘2px‘ color=‘red‘ id=‘msg‘></font>
    				</td>
    			</tr>
    			<tr>
    				<td>Password : </td>
    				<td><input type="password" name="password" value=""/></td>
    				<td>${msg }</td>
    			</tr>
    			<tr>
    				<td colspan="2" align="center">
    					<input style="width: 100px; height: 35px;
    						border-radius:5px; background-color:blue; opacity:0.7"
    						type="submit" value="Register"/>
    				</td>
    			</tr>
    		</table>
    	</form>
    </div>
  </body>
</html>

  daoservlet层:

package cn.geore.ajax;

import java.io.IOException;
import java.sql.SQLException;

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

import priv.geore.toolutils.web.FirmHttpServlet;

public class AjaxServlet extends FirmHttpServlet {
	private AjaxDao dao = new AjaxDao();
	/**
	 * ajax异步请求,判断用户名是否已经被注册
	 *
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void ifRegister(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username = request.getParameter("username");
		try {
			Hero hero = dao.findByName(username);
			System.out.println(hero);
			if(hero!=null) {
				response.getWriter().print("n");
			}
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

package cn.geore.ajax;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import priv.geore.toolutils.jdbc.FirmQueRunner;

public class AjaxDao {
	private QueryRunner runner = new FirmQueRunner();

	public Hero findByName(String string) throws SQLException {
		String sql = "SELECT * FROM hero WHERE heroname=?";
		return runner.query(sql, new BeanHandler<Hero>(Hero.class), string);
	}
}

  

  photo:

  

  

注意: 

  (1)onreadystatechange 属性

    onreadystatechange 属性存有处理服务器响应的函数。

  (2)readyState 属性

    readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。

readyState 属性
状态 描叙
0 请求未初始化(在调用 open() 之前)
1 请求已提出(调用 send() 之前)
2 请求已发送(这里通常可以从响应得到内容头部)
3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
4 请求已完成(可以访问服务器响应并使用它)

  (3)responseText 属性

    可以通过 responseText 属性来取回由服务器返回的数据。

时间: 2024-10-10 06:32:24

Ajax局部刷新(使用JS操作)的相关文章

php Ajax 局部刷新

php Ajax 局部刷新: HTML部分 </head> <body> <h1>Ajax动态显示时间</h1> <input type="button" value="开始显示时间" id="go" onclick="start()" /> <p>当前时间:<font color="red"><span id=&qu

局部刷新的js分页插件

补上写好的js分页插件.水平有限,可供参考.另外有好建议的可以在评论里面提出,我再做优化.废话不多说了,代码走起! (一)splitPage.js分页插件 直接copy就能使用: /*** * 功能:局部刷新分页显示表格内容 * 作者:JML * 版本:1.0 * 备注:自己封装的局部刷新分页插件,主要是想了解一下分页插件是如何运作的 * 缺陷:水平有限,插件很不灵活,还有两个硬编码块 * 建议:大家还是下载专门的js分页插件来进行使用吧(本代码可供参考) */ /** * 帮助文档: * 1.

实现带有验证码的ajax局部刷新登录界面

现在的登录界面大多数都带有:验证码的功能+验证码局部刷新+ajax登录.用ajax登录的好处最明显就是速度快,URL地址没有变化.所有现在登录功能很少再用form表单post提交了,大多数都已经采用了ajax局部访问后台然后解析返回值并显示结果到界面上面.理论还是要拿来实践才能验证的,下面直接上代码. 运行界面: 1.验证码后台访问部分上一篇博客已经介绍多了,这里介绍如何利用img中src实现局部刷新验证码的功能. html部分: <p><label class="lbrigh

再谈ajax局部刷新

前言:所谓"学而不思则罔.思而不学则殆",孔夫子说话就是有深意.之前我就发表了一篇极致ajax局部和整体刷新,同时又发表了jfinal与bootstrap的登录跳转实战.jfinal与bootstrap的登出实战,但是经过近来的实战和改进,发现上一次的做法并不优秀,用起来很笨拙,不顺手,而这一次的方案,恰好就解决了这个问题. 案例: 描述: 1. 点击登录则弹出登录对话框 2. 如果用户名密码不正确,则提示错误信息 3. 当输入信息正确,则刷新登录信息,显示用户名和退出按钮 4. 点击

实现AJAX局部刷新以及PageMethod方法的使用

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../Scripts/jquery-2.1.1.js"></script> <script type="text/javascript"> //1. 使用P

Ajax 局部刷新

方式一:function hits1(troops) {    var troops = troops;    var ajax=Ajax();    var url = 'xxx.php';    ajax.post(url,{'troops':troops},function(data){        $('.dw_hits1').html(data);    });} 方式二:function hits1(troops) {    var troops = troops;    var

ajax局部刷新分页

//请求数据加载绑定页面 function DindAjax(pageIndex) {//获取参数 var colors = $("#colorsVal").val(); $.ajax({ url: '/Ajax/muban/AjaxHandler.ashx', type: 'POST', data: 'ajaxType=pagelist&pageSize=40&pageIndex=' + pageIndex+ '&colors=' + colors, data

页面刷新 整个页面刷新和局部刷新

整个页面刷新 1.页面自动刷新:把如下代码加入<head>区域中 <meta http-equiv="refresh" content="20"> 其中20指每隔20秒刷新一次页面. 2.页面自动跳转:把如下代码加入<head>区域中 <meta http-equiv="refresh" content="20;url=“#"> 其中20指隔20秒后跳转到#页面 3.页面自动刷新

整体刷新和局部刷新frameset窗口

在项目中,经常会遇到页面分割,最常见的系统或网站的主界面.主页面分为,上面系统简介.下面作者简介.左边系统功能菜单.右边则是菜单真正展示的界面. 遇到这种这种分割页面,大家首先想到是frameset,使用framset分割多种frame,这种方式简单.若是不喜欢使用framset,喜欢前台设计的人也许会选择div拼接,浮动,这就考查css样式的功底了. 这次主要讲解局部刷新的问题.需求是:左边frame,右边frame. 大家肯定疑问,这样刷新没有问题啊.的确如此.现在使用framset,分割两