AJAX简介
一.什么是AJAX?
- -- ajax全名 async javascript and xml (异步js和xml)
- -- 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具
- -- AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
- -- AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
- -- 是⼀个 默认异步执⾏机制的功能,AJAX分为同步(async = false)和异步(async = true)
二.AJAX的特点
AJAX的优点:
- 可以无需刷新页面与服务器端进行通信
- 允许你根据用户事件来更新部分页面内容
AJAX的缺点:
- 没有浏览历史,不能回退
- 存在跨域问题
- SEO不友好
AJAX的使用
创建XMLHttpRequst对象
- XMLHttpRequst对象是AJAX的基础
- 所有浏览器均兼容支持XMLHttpRequst对象
- XMLHttpRequst用于在后台与服务器交换数据
创建XMLHttpRequst的语法:
var xml = new XMLHttpRequst();
老版本创建方式:
var xml = new ActiveObject("Microsoft.XMLHTTP");
浏览器兼容判断
var xml;
if(window.XMLHttpRequst){
xml = new XMLHttpRequst();
}else{
xml = new ActiveObject("Microsoft.XMLHTTP");
}
XMLHttpRequst请求
------将请求发送到服务器,我们需要使用XMLHttpRequst对象的open()和send()------
规定请求的类型、URL 以及是否异步处理请求。
1.open(merhod,url,asyns)
- merhod:请求类型
- url:服务器位置
- asyns:true(异步)false(同步) 将请求发送到服务器。
2.send()用get格式的请求
3.send(String)用post请求
4.setRequestHeader(header,value)
- header:规定头部名称
- value:规定头部值
GET请求
var xml = new XMLHttpRequest();
//案例1:普通GET请求
xml.open("GET","服务器地址",true);
xml.send();
//案例2:在案例1的时候可能产生缓存得到过的结果,所以URL需要添加应该唯一的ID
xml.open("GET","服务器地址"+Math.random(),true);
xml.send()
//案例3:也可以通过GET发送消息,需要在URL添加信息
xml.open("GET","服务器地址?name=admin&pwd=admin",true);
xml.send();
POST请求
//案例1:普通的POST请求
xml.open("POST","服务器地址",true);
xml.send();
//案例2.复杂POST请求
xml.open("POST","服务器地址",true);
xml.setRequestHeader("content-type","application/x-www-form-urlencoded");
xml.send("name=admin&pwd=admin");
如果想要HTML表单那样POST数据,请通过setRequestHeader(header,value) 1.setRequestHeader(header,value)
- header:规定头部名称
- value:规定头部值 2.onreadystatechange属性:可以定义当请求接收到应答时所执行的函数;
3.readyState属性:保存了XMLHttpRequest的状态
- ##0:请求未初始化
- ##1:服务器连接已建立
- ##2:请求已接收
- ##3:正在处理请求
- ##4:请求已完成且响应已就绪 4.statusTest属性:返回状态文本
5.responseXML属性:用来解析XML对象的,获取XML形式的响应
6.responseText属性:获取字符串形式的响应
每当 readyState 发生变化时就会调用 onreadystatechange 函数。当 readyState 为 4,status 为 200 时,响应就绪:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="data">
<button >点击</button>
</form>
<script type="text/javascript">
var xml = new XMLHttpRequest();
xml.open("GET","data");
xml.send();
xml.onreadystatechange = function(){
if(xml.readyState == 4 && xml.status == 200){
alert("处理完成!!!"+xml.responseText);
}
}
</script>
</body>
</html>
JAVA
package cn.cude;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/data")
public class MyGet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charaset=utf-8");
resp.getWriter().write("xxxxxx");
}
}
GET案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button id="app" value="点击">点击</button>
<div id="ass"></div>
<script type="text/javascript">
var app = document.getElementById("app");
var ass = document.getElementById("ass");
app.addEventListener("click",function (){
//1,获取XMLHttpRequest对象
var xml = new XMLHttpRequest();
//2.向数据库发送信息
// data 指路径
xml.open("GET","data",true);
xml.send();
//3.当接收到响应时,执行函数
xml.onreadystatechange = function(){
//4.判断返回的状态
if(xml.readyState == 4 && xml.status == 200){
ass.innerText = xml.responseText;
}
}
});
</script>
</body>
</html>
package cn.cude;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/data")
public class MyGet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charaset=utf-8");
resp.getWriter().write("xxxxxx");
}
}
POST案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button id="app" value="点击">点击</button>
<div id="ass"></div>
<script type="text/javascript">
var app = document.getElementById("app");
var ass = document.getElementById("ass");
app.addEventListener("click",function (){
//1,获取XMLHttpRequest对象
var xml = new XMLHttpRequest();
//2.向数据库发送信息
// data 指路径
xml.open("POST","data",true);
//--如果想要HTML表单那样POST数据,请通过setRequestHeader(header,value)
xml.setRequestHeader("content-type","application/x-www-form-urlencoded");
xml.send("name=sss&age=aaa");
//3.当接收到响应时,执行函数
xml.onreadystatechange = function(){
//4.判断返回的状态
if(xml.readyState == 4 && xml.status == 200){
ass.innerText = xml.responseText;
}
}
});
</script>
</body>
</html>
package cn.cude;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/data")
public class MyGet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charaset=utf-8");
String name = req.getParameter("name");
String age = req.getParameter("age");
System.out.println(name);
System.out.println(age);
resp.getWriter().write("xxxxxx");
}
}