ajax—初学第一课

一、基本理解:

 

1.什么是ajax?

2.request、session、application区别:

 

     request:解决一次请求内的数据共享;

     session:不同请求内的数据共享;

     application:不同用户的不同请求的数据共享;

3.通过浏览器发送请求的方式:

   ① form表单

   ② a标签

   ③window.location.herf

4.ajax理解:

 

①ajax:需要把下一次的响应内容在当前的响应内容上直接显示出来,而不是刷新;

②不改变浏览器地址信息,相当于调用浏览器内部获取发请求的机制,直接给后台服务器发请求(XmlHttpRequest:ajax引擎对象
发送请求),当浏览器接收到这样一个请求的响应内容时,会将该响应响应给当前正在执行的js,不会把整个页面重新刷新掉。

③ajax引擎对象:让我们在当前页面正在运行的js来发送请求,该请求就属于当前页面的一部分(因为js隶属于当前页面),当请求来的时候必须返还给发请求的js函数,js函数将拿到的结果再放在当前页面内。

④ajax:当前jsp页面的一个js函数来发送请求,接收到的响应内容也会隶属于当前的js,本质上就是js操作文档结构,只不过是数据是动态的。

⑤ajax这门技术的诞生是为了解决在当前页面内,显示其他的响应内容。而避免响应内容被重复的响应。

二、使用ajax

1. 使用ajax的基本内容

2. ajax的基本使用代码:

  ①first.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ajax first</title>
<script type="text/javascript">
	function getData(){
		//1.创建ajax引擎对象
		var ajax;
		if(window.XMLHttpRequest){//支持火狐
			ajax=new XMLHttpRequest();
		}else if(window.ActiveXObject){//支持低版本的IE
			ajax=new ActiveXObject("Msxml2.XMLHTTP");
		}
		
		//2.复写onreadystatechange()函数
		ajax.onreadystatechange=function(){//函数声明,并非调用
			
			//2.1.判断ajax状态码
			if(ajax.readyState==4){
				
				//2.1.1.判断响应状态码
				if(ajax.status==200){
					
					//①获取响应内容
					var result=ajax.responseText;
					
					//②获取元素对象
					var showDiv=document.getElementById("show-div");
					showDiv.innerHTML=result;
				}else if(ajax.status==404){
					var showDiv=document.getElementById("show-div");
					showDiv.innerHTML="请求资源不存在";
				}else if(ajax.status==500){
					var showDiv=document.getElementById("show-div");
					showDiv.innerHTML="服务器繁忙";
				}	
			}else{
				/* 当响应结果还没有过来时,使用动态图片刷新界面来显示	 */			
				var showDiv=document.getElementById("show-div");
				showDiv.innerHTML="<img  src='img/refresh.gif' />";			
			}

		}
		
		//4.发送请求
		    /* 
			异步和同步:
			open()参数:get:访问方式;  ajax:访问路径,访问的相对路径为/ajax
			ajax.open("get","ajax"); --默认执行方式是异步
		    ajax.open("get","ajax",false);--同步
		    ajax.open("get","ajax",true);--异步
		    */
		    /* 
			get方式和post方式:
			   ①get请求
				ajax.open("get","ajax?name=一曦&pwd=123");--中文可能乱码	
				ajax.send(null);--get请求,请求参数在url后面,故参数为null
			   ②post请求
			    ajax.open("post","ajax");
				ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				ajax.send("name=一曦&pwd=123");--post请求参数
				ajax.open("post","ajax");
		    */
		
		ajax.open("post","ajax");
		/*application/x-www-form-urlencoded:告诉服务器用form表单提,
		   提取方式是键值对,服务器可知道做什么怎么做的问题,
		   如果不加,则服务器会把post参数当成字符串,而不是键值对,
		   当post请求告诉服务器,请求头里面的内容是键值对时,服务器会按照键值对将参数切开 ;
		  如果不写,服务器就不会知道该如何去解析请求。
		 */
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send("name=一曦&pwd=123");
		alert("判断同步or异步");
		
		
	}
</script>
<style>
	#show-div{
		border:1px solid;
		width:200px;
		height:100px;
	}
</style>
</head>
<body>
	<h3>欢迎来到一曦的后花园</h3>
	<hr>
	<input type="button" value="测试"  onclick="getData()">
	<div id="show-div">
	
	</div>
	<br><hr>
	
</body>
</html>

②servlet代码

package com.yixi.servlet;

import java.io.IOException;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//利用注解配置访问该servlet的路径
@WebServlet("/ajax")
public class AjaxServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException {
		//1.设置请求编码格式
		req.setCharacterEncoding("utf-8");

		//2.设置响应编码格式
		res.setCharacterEncoding("utf-8");
		res.setContentType("text/html;charset=utf-8");
		try {
		  /*控制响应请求的线程,休眠,因为是异步请求的愿意,
			故而响应操作和休眠操作不能在一起写,必须有前有后才能正确模拟休眠状态*/
			Thread.sleep(1000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		
		//3.获取请求信息
		String name=req.getParameter("name");
		String pwd=req.getParameter("pwd");
		System.out.println("name:"+name+"-pwd:"+pwd+"-method:"+req.getMethod());
		
		
		//4.处理请求信息
		
		//5.响应请求信息
		
		res.getWriter().write("春风十里,时光正好");

		
	}
}

③运行结果

点击测试按钮后:地址栏不发生改变,只局部刷新

二、ajax流程总结

    

        

 

 

ajax状态码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值