JavaWeb笔记31-Ajax原理及JS方式实现

Ajax
异步js和xml的组装
核心:异步刷新技术

概念:全局刷新
在请求转发/重定向技术中,页面跳转的刷新即全局刷新

异步刷新:如果网页中某一个地方需要修改,异步刷新可以使:只刷新需要修改的地方,而页面中其他地方保持不变,例如:百度搜索框、视频点赞

Ajax实现
一共有两种方式:JavaScript和JQuery,但在开发中使用的基本是JQuery

JavaScript实现:
依赖于XMLHttpRequest对象

XMLHttpRequest对象的·方法
1、open(参数1,参数2,true)
与服务端建立链接
第一个参数是方法名(提交方式get/post)
第二个参数是服务器地址
第三个参数如果是true,说明此方法是异步刷新,如果是false,说明是全局刷新,一般情况下都是true
2、send()
如果是get请求:send参数为null即send(null)
如果是post请求:send有参数值为send(参数值)
3、setRequestHeader(header,value)
如果是get请求:不需要设置此方法
如果是post请求:需要设置,还要分两种情况:
a、如果请求元素中包含了文件上传:

setRequestHeader("Content-Type","multipart/form-data");

b、如果不包含文件上传:

setRequestHeader("Content-Type","application/x-www-form-utlencoded");

XMLHttpRequest对象的属性
1、readystate:请求状态
表示XMLHttpRequest对象发送的HTTP请求状态,共有五种状态,如表所示:

状态值简介
0表示XMLHttpRequest对象没有初始化
1表示XMLHttpRequest对象开始发送请求,已经执行了open()方法并完成了相关资源的准备
2表示XMLHttpRequest对象已将请求发送完毕,已经执行了send()方法来发送请求,但还没有收到响应
3表示XMLHttpRequest对象开始读取响应信息,已经接受到HTTP响应的头部表示,但是还没有将响应体接收完毕
4表示XMLHttpRequest对象将响应信息全部读取完毕

只有状态为4代表请求完毕

2、status:响应状态
status表示HTTP响应中的状态码,各状态码的含义入表所示:

状态码含义
200服务器正常响应
400无法找到请求的资源
403没有访问权限
404访问的资源不存在
500服务器内部错误,很可能使服务器代码有错

只有状态码为200代表响应正常

3、onreadystatechange:回调函数

4、responseText
响应格式为String(text)

5、responseXML
响应格式为XML

示例
实例简述:注册一个手机号码,客户端发出一个手机号,服务端判断手机号是否已存在,存在:true,不存在:false

a、客户端index.jsp,负责数据的提供和最终反馈的获取
(含get和post两种请求方式)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<!-- 鼠标单击事件-->
<script type="text/javascript">

	function registerGet(){   
	//get方式请求
		var mobile=document.getElementById("mobile").value; //获取mobile值
		xmlHttpRequest=new XMLHttpRequest();   //前面不标明属性表示是全局变量
		xmlHttpRequest.onreadystatechange=callBack;  //注意回调函数不需要加括号
		//因为get方式send为空值,所以参数需要用地址栏方式传递
		xmlHttpRequest.open("get","MobileServlet?mobile="+mobile,true);
		xmlHttpRequest.send(null);  
	}

	function registerPost(){
	//post方式请求
		var mobile=document.getElementById("mobile").value;
		//通过ajax异步方式请求服务端
		xmlHttpRequest=new XMLHttpRequest();
		//设置xmlHttpRequest对象的回调函数
		xmlHttpRequest.onreadystatechange=callBack;
		xmlHttpRequest.open("post","MobileServlet",true);
		//设置post方式头消息
		xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//通过send传送值
		xmlHttpRequest.send("mobile="+mobile);
	}
	
	//定义回调函数(接收服务端返回值)
	function callBack(){
		if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){
			//接收服务端返回的数据
			var data=xmlHttpRequest.responseText; //服务端返回值为String格式
			if(data=="true"){
				alert("此号码已存在,请更换!");
			}else{
				alert("注册成功!");
			}
		}
	}
	
</script>

<title>Insert title here</title>
</head>
<body>
	手机:<input id="mobile"><br/>
	<input type="button" value="注册" onclick="registerGet()"/>
</body>
</html>

b、服务端MobileServlet,负责数据的处理和处理结果的反馈

package my.mobile.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 MobileServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out=response.getWriter();
		String mobile=request.getParameter("mobile");

		//假设此时数据库中只有一个号码:12345678910
		if(("12345678910").equals(mobile)) {  //常量字符串写在前,防止返回空指针
			//return true;
			//通过输出流进行信息返回
			out.write("true");
		}
		else {
			//return false;
			out.write("false");
		}
		out.close();
	}


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值