Ajax

一、Ajax简介

AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),Ajax可以实现异步请求。AJAX 是一种在 2005 年由 Google 推广开来的编程模式。

二、Ajax语法介绍

学习使用Ajax主要就是学习XMLHttpRequest对象的方法和属性

在这里插入图片描述
在这里插入图片描述

三、编写第一个ajax程序

简单理解ajax:在不需要刷新整个页面的同时也能在页面中刷新显示数据
1、创建web项目然后建立servlet

package com.java.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletDemo
 */
@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		response.getWriter().print("揽月随风醉");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、建立Jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<script type="text/javascript">
		var xmlHttp;
		//1、创建xmlhttprequest
		function ajax() {
			try { //浏览器是这些:Firefox, Opera 8.0+, Safari 就执行下面代码
				xmlHttp = new XMLHttpRequest();
			} catch (e) {
				try { //如果浏览器是 Internet Explorer 就执行下面代码(ie浏览器分两个版本,当前为一个版本,下面一个为另外一个版本)
					xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					try {
						xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {//以上都没有执行就表示此浏览器不支持ajax
						alert("不支持Ajax!");
					}
				}
			}
			//2、建立链接
			//参数分别是提交方式与提交地址,后面跟的时间是因为ajax每次都需要点击所以需要在后面跟一个参数,但是参数每次都不一样所以才使用时间
			xmlHttp.open("GET","ServletDemo1?time="+new Date().getTime());
			//3、发送请求
			xmlHttp.send(null); 
			//4.设置回调函数,接受服务器返回的数据
			//注意:readyState的状态变化都会触发onreadystatechange事件
			xmlHttp.onreadystatechange = showInfo;
		}
		
		function showInfo() {
			//alert(xmlHttp.readyState);
			if (xmlHttp.readyState == 4) {
				if (xmlHttp.status == 200 || xmlHttp.status == 304) {//304表示服务器的内容没有变化
					document.getElementById("div1").innerHTML = xmlHttp.responseText;
				}
			}
		}
	</script>

	<input type="button" value="Ajax" onclick="ajax()">
	<div id="">
		<div id="div1" style="width: 300px;height: 200px;border: 1px solid red;"></div>
	</div>
</body>
</html>

在这里插入图片描述

四、 ajax传值

1)、Get方式传值

1、传值

xmlHttp.open("GET","ServletDemo1?username=好人&password=123&time="+new Date().getTime());

2、接收

String parameter1 = request.getParameter("username");
String parameter2 = request.getParameter("password");
System.out.println(parameter1+"---"+parameter2);

在这里插入图片描述

2)、Post方式传值

1、传值

//2、建立链接
xmlHttp.open("POST","ServletDemo1?time="+new Date().getTime());
//post方式是通过send把参数发送给服务器端,所以一定要指定发的类型					
//"content-type","application/x-www-form-urlencoded"为普通的表单类型,表单默认就是这个类型
xmlHttp.setRequestHeader("content-type","application/x-www-form-urlencoded");
//3、发送请求
xmlHttp.send("username=坏人&password=456");

2、接收

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String parameter1 = request.getParameter("username");
String parameter2 = request.getParameter("password");
System.out.println(parameter1+"---"+parameter2);
response.getWriter().print("揽月随风醉");

在这里插入图片描述

五、jQuery实现Ajax

  • JQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(),
    $.get() 和 $.post(), 第三层是 $.getScript() 和 $.getJSON()。

1)、load

  • load方法:(传递方式: load() 方法的传递参数根据参数 data 来自动自定. 如果没有参数传递, 采用 GET 方式传递,否则采用 POST 方式)

load(url,[data],[callback])
+:url:请求的服务器的资源地址
+:data:向服务器端发送数据,JSON串格式.如果有此参数,就以POST方式提交数据,没有就是get方式提交数据
+:callback:function(data,textStatus,xhr){}
++:data:服务器端返回的数据
++:textStatus:状态。succuss, error, notmodify, timeout
++:xhr:XmlHttpRequest对象本身

演示(一)

1、servlet

package com.java.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ServletDemo3")
public class ServletDemo3 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String parameter1 = request.getParameter("username");
		String parameter2 = request.getParameter("password");
		System.out.println("dadsdas"+"--"+parameter1+"--"+parameter2);
		
		response.getWriter().print(parameter1+"--"+parameter2);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
	<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
	<input type="button" value="按钮" id="anniu">
	<div style="width: 200px;height: 100px;background-color: red" id="div1"></div>
	
	<script type="text/javascript">
	$(function() {
		$("#anniu").click(function(){
			$("#div1").load("ServletDemo3",{username:"heihei",password:"123"},function(data,textStatus,xhr){
				alert(data);
			});
		})
	})
	</script>
</body>
</html>

演示(二)

  • 如果只需要加载目标 HTML 页面内的某些元素, 则可以通过 load() 方法的 URL 参数来达到目的. 通过 URL参数指定选择符, 就可以方便的从加载过来的 HTML 文档中选出所需要的内容.
  • load() 方法的 URL 参数的语法结构为 “url selector”(注意: url 和 选择器之间有一个空格)(*.jsp h1只加载h1元素的内容)这样就只会显示h1的内容,但是data中h1和h2都传过来了。

1、servlet

package com.java.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Qewqeq
 */
@WebServlet("/ServletDemo3")
public class ServletDemo3 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String parameter1 = request.getParameter("username");
		String parameter2 = request.getParameter("password");
		System.out.println("dadsdas"+"--"+parameter1+"--"+parameter2);
		
		response.getWriter().print("<h1>parameter1</h1>"+"--"+"<h2>parameter2</h2>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
	<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
	<input type="button" value="按钮" id="anniu">
	<div style="width: 200px;height: 100px;background-color: red" id="div1"></div>
	
	<script type="text/javascript">
	$(function() {
		$("#anniu").click(function(){
			$("#div1").load("ServletDemo3 h1",{username:"heihei",password:"123"},function(data,textStatus,xhr){
				alert(data);
			});
		})
	})
	</script>
</body>
</html>

在这里插入图片描述

演示(三)

可以提交给jsp,这样jsp中的内容就会被加载到当前页面

1、data.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<table border="1" width="100%">
    	<tr align="center"><th>aa</th><th>bb</th></tr>
    	<tr align="center"><td>1</td><td>2</td></tr>
    	<tr align="center"><td>3</td><td>4</td></tr>
	</table>

</body>
</html>

在这里插入图片描述
2、index4.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
	<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
	<input type="button" value="按钮" id="anniu">
	<div style="width: 200px;height: 100px;background-color: red" id="div1"></div>
	
	<script type="text/javascript">
	$(function() {
		$("#anniu").click(function(){
			//请求地址,传递参数,回调函数
			$("#div1").load("data.jsp");
		})
	})
	</script>
</body>
</html>

在这里插入图片描述
也可以提交给servlet然后转给jsp(这样很多效果就好做了)

1、servlet

package com.java.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletDemo4
 */
@WebServlet("/ServletDemo4")
public class ServletDemo4 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/data.jsp").forward(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
	<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
	<input type="button" value="按钮" id="anniu">
	<div style="width: 200px;height: 100px;background-color: red" id="div1"></div>
	
	<script type="text/javascript">
	$(function() {
		$("#anniu").click(function(){
			//请求地址,传递参数,回调函数
			$("#div1").load("ServletDemo4");
		})
	})
	</script>
</body>
</html>

在这里插入图片描述

2)、get(Ajax提交表单数据)

1、Servlet

package com.java.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Servlet
 */
@WebServlet("/ServletDemo5")
public class ServletDemo5 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println(username+","+password);
		request.setAttribute("useranme", username);
		response.getWriter().print(username);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、Jsp
$("#form1").serialize()提取表单数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
	<span id="span0">登录</span>
	<span id="span4"></span>
	<div style="display: none;border: 1px solid;width: 300px;height: 200px;position: fixed;" id="div1">
		<span id="closeSpan">X</span>
		<form id="form1">
			用户名:<input type="text" name="username"><br>
			用密码:<input type="password" name="password">
		</form>
		
		<span id="span1">登录</span>
		
	</div>
	<script type="text/javascript">
		$("#span0").mouseover(function(){
			
			$("#div1").show();
		})
		
		$("#closeSpan").click(function(){
			$("#div1").hide();
		})
		
		//ajax提交数据
		$("#span1").click(function() {
			$.get("ServletDemo5",$("#form1").serialize(),function(data,status,xml){
				alert(data)
				$("#span4").text("欢迎"+data+"登录");
				
			});
			$("#div1").hide();
			$("#span0").hide();
			
		})
	</script>

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值