testAjax.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script>
function test() {
//第一步:创建XMLHttpRequest对象
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
//第二步:使用XMLHttprequest创建请求
request.open("get", "AjaxServlet");
//request.open(method, url, async, username, password)后面两个可以不填,其中的url是web.xml中的servlet-mapping的ur
//asyncl是否异步,默认是true
//第三部:写回调函数处理服务器返回的数据
request.onreadystatechange = function() { //onreadystatechange是当readystate改变时触发这个函数
if (request.readyState == 4) { //request.readyState返回1,2,3,4分别代表不同的含义,其中4是传输成功的意思
var result = request.responseText; //得到服务器返回的数据
document.getElementById("show").innerHTML = result;
}
}
request.send(null); //如果不加null火狐会报错
}
</script>
</head>
<body>
<div id="show"></div>
<input type="button" value="测试" onclick="test()" />
</body>
</html>AjaxServlet
package action;
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 AjaxServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello Ajax !");
out.flush();
out.close();
}
}
关于HTTP状态码(其实就是一个status方法)
修改testAjax.jsp中的JS
<script>
function test() {
//第一步:创建XMLHttpRequest对象
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
//第二步:使用XMLHttprequest创建请求
request.open("get", "AjaxServlet");
//request.open(method, url, async, username, password)后面两个可以不填,其中的url是web.xml中的servlet-mapping的ur
//asyncl是否异步,默认是true
//第三部:写回调函数处理服务器返回的数据
request.onreadystatechange = function() { //onreadystatechange是当readystate改变时触发这个函数
if(request.status==200){ //Http状态码 200为请求成功
if (request.readyState == 4) { //request.readyState返回1,2,3,4分别代表不同的含义,其中4是传输成功的意思
var result = request.responseText; //得到服务器返回的数据
document.getElementById("show").innerHTML = result;
}
}else if(request.status==404){ //想测试404的话可以修改创建请求时的路径
document.getElementById("show").innerHTML = "请求资源未找到!";
}else if(request.status==500){
document.getElemenById("show").innnerHTML = "内部服务器错误 !";
}
}
request.send(null);
}
</script>异步同步的表达
修改testAjax.jsp中的JS
<script>
function test() {
//第一步:创建XMLHttpRequest对象
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
//第二步:使用XMLHttprequest创建请求
request.open("get", "AjaxServlet", true);
//request.open(method, url, async, username, password)后面两个可以不填,其中的url是web.xml中的servlet-mapping的ur
//asyncl是否异步,默认是true
//第三部:写回调函数处理服务器返回的数据
request.onreadystatechange = function() { //onreadystatechange是当readystate改变时触发这个函数
if (request.readyState == 4) { //request.readyState返回1,2,3,4分别代表不同的含义,其中4是传输成功的意思
var result = request.responseText; //得到服务器返回的数据
document.getElementById("show").innerHTML = result;
}
}
request.send(null);
alert("异步的操作!");//设置为异步之后可以比作为同时运行,而不会等待其中一个返回再接着运行
}
</script>在AjaxServlet返回数据前加一句
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}Get,Post传参
AjaxServlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().println(request.getParameter("a"));
}Get传参
request.open("get", "AjaxServlet?a=123", true);
Post传参
request.open("post", "AjaxServlet", true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.send("a=123");Ajax的封装
封装过程
<script>
function createAjaxObj() {
var requset;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
return request;
}
function test() {
var request = createAjaxObj();
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
handle200(request);
} else if (request.status == 404) {
handle404(request);
} else if (request.status == 500) {
handle500(request);
}else{
loading();
}
}
}
request.open("post", "aAjaxServlet", true);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.send("a=123");
}
function handle200(request) {
var result = request.responseText;
document.getElementById("show").innerHTML = result;
}
function handle404(request) {
document.getElementById("show").innerHTML = "No find !";
}
function handle500(request) {
document.getElementById("show").innerHTML = "Server is busy !";
}
function loading(){
document.getElementById("show").innerHTML = "Finding !";
}
</script>封装结果 ajaxUtil.js
function createAjaxObj() {
var requset;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
return request;
}
function test(method, url, data, asychn, loading, handle200, handle404,
handle500) {
var request = createAjaxObj();
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
if (handle200) { //如果为空则不处理
handle200(request);
}
} else if (request.status == 404) {
if (handle404) {
handle200(request);
}
} else if (request.status == 500) {
if (handle500) {
handle500(request);
}
} else {
if (loading) {
loading();
}
}
}
//下面处理get和post
if ("get" == method.toLowerCase()) {
if (data == null || data == "") {
request.open(method, url, asychn);
} else {
request.open(method, url + "?" + data, asychn);
}
request.send(null);
} else if ("post" == method.toLowerCase) {
}
request.open("post", url, asych);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.send(data);
}
}
本文介绍了一个简单的Ajax应用案例,包括Ajax的基本使用方法、HTTP状态码的处理、异步与同步的区别、GET与POST请求参数的传递方式,以及如何封装Ajax操作。
3万+

被折叠的 条评论
为什么被折叠?



