AJAX的定义
AJAX是异步的JavaScript和XML;
AJAX是一种用于创建更好更快以及交互性更强的Web应用程序的技术;
AJAX是一种独立于Web服务器软件的浏览器技术;
AJAX不是一种新的编程语言,而是一种技术;
AJAX 使用 JavaScript 在web 浏览器与 web 服务器之间来发送和接收数据(前端后端交互);
AJAX在浏览器与Web服务器之间使用异步数据传输(HTTP请求)。
XMLHttpRequest
XMLHttpRequest使用方法
步骤:
1.创建XMLHTTPRequest对象
2.使用open()方法设置和服务器的交互信息
3.设置requestHeader()
4.设置发送的数据,开始和服务器端交互
5.取得响应,注册事件
6.如果请求完成,并且响完成,可以获取到响应数据
7.响应解码
实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AJAX的基本使用</title>
</head>
<body>
<button onclick="getData()">获取数据</button>
<script>
function getData(){
// 发送请求
// 1.使用XMLHttpRequest创建一个实例
var request=new XMLHttpRequest();
// 2.使用open方法设置和服务器的交互信息
request.open('get','https://api.muxiaoguo.cn/api/lishijr');
// 3.设置requestHeader() 如果默认可不设置requestHeader
// request.setRequestHeader()
// 4.send()发送请求
request.send()
// 5.获取响应 如果请求完成,并且响应完成,获取到响应数据
request.onreadystatechange=function(){
// status===200 readyState===4
if(request.readyState===4&&request.status===200){
console.log(request.responseText);
var res=JSON.parse(request.responseText)
console.log(res);
// 根据数据添加对应的节点
for(var arrIndex in res.data){
// 创建一个节点
var p=document.createElement('p');
p.innerHTML=res.data[arrIndex].title;
document.body.appendChild(p);
}
}
}
}
</script>
</body>
</html>
常用请求使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>常用请求使用</title>
<!-- 引入序列化工具 -->
<script src="./qs.js"></script>
</head>
<body>
<button onclick="getParams()">获取有参get请求</button>
<button onclick="postNo()">post无参</button>
<button onclick="toLogin()">登录</button>
<script>
// 使用get发送有参请求
function getParams(){
var request=new XMLHttpRequest();
// 第一种方式 拼接字符串
//request.open('get','https://api.muxiaoguo.cn/api/tianqi?' + 'city=' + '苏州' + '&' + 'type=' + '1');
// 第二种方式 传递序列化后的参数
var params={
city:'苏州',
type:1
}
// 参数序列化 要先引入QS序列化工具
var qs=Qs;
request.open('get','https://api.muxiaoguo.cn/api/tianqi?'+qs.stringify(params));
request.send();
console.log(qs.stringify(params));
request.onreadystatechange=function(){
if(request.readyState===4&&request.status===200){
console.log(request.responseText);
}
}
}
// 使用post发送无参请求
function postNo() {
var request = new XMLHttpRequest()
request.open('post','https://api.muxiaoguo.cn/api/Gushici');
request.send();
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
console.log(request);
}
}
}
// 使用post发送有参请求
function toLogin(){
var user={
password:'123321',
username:'admin1'
}
// 1.创建XHR实例
var request=new XMLHttpRequest();
// 2.设置open()
request.open('post','http://139.196.88.7:8888/user/login');
// 3. 设置请求头
request.setRequestHeader('Content-type','application/json');
// 4.发送请求
request.send(JSON.stringify(user));
// 5.获取响应
request.onreadystatechange=function(){
if(request.readyState===4 && request.status===200){
// console.log(request.responseText);
var res = JSON.parse(request.responseText)
console.log(res.data.token);
}
}
}
</script>
</body>
</html>
AJAX的封装
//针对行学天下系统 在引入util.js之前 要引入qs
var qs = Qs;
// 替换成自己的swagger地址
var baseURL = 'http://139.196.172.209:8888';
//1.提供登录方法,提供获取token方法
// user = {username:'',password:''}
function login(user) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('post', baseURL + '/user/login');
// 设置请求头部
httpRequest.setRequestHeader('Content-Type', 'application/json');
// 最终传递的数据
httpRequest.send(JSON.stringify(user));
//接受响应
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
//处理响应数据
var res = httpRequest.responseText;
var token = JSON.parse(res).data.token;
//保存到sessionStorage中
sessionStorage.setItem('token', token);
}
if (httpRequest.readyState === 4 && httpRequest.status === 500) {
console.log('错误:', httpRequest.responseText);
}
}
}
//2.myAjax对象,对象里有get方法,postForm方法,postJSON方法
var myAjax = {
get: function (url, params, success, error) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('get', baseURL + url + "?" + qs.stringify(params));
// httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//认证
httpRequest.setRequestHeader("Authorization", sessionStorage.getItem('token'));
//发送请求
httpRequest.send();
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
success(JSON.parse(httpRequest.responseText));
}
if (httpRequest.readyState === 4 && httpRequest.status === 500) {
error(JSON.parse(httpRequest.responseText));
}
}
},
postForm: function (url, params, success, error) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('post', baseURL + url);
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//认证
httpRequest.setRequestHeader(" Authorization", sessionStorage.getItem('token'));
//发送数据
httpRequest.send(qs.stringify(params));
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
success(JSON.parse(httpRequest.responseText));
}
if (httpRequest.readyState === 4 && httpRequest.status === 500) {
error(JSON.parse(httpRequest.responseText));
}
}
},
postJSON: function (url, params, success, error) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('post', baseURL + url);
httpRequest.setRequestHeader('Content-Type', 'application/json');
//认证
httpRequest.setRequestHeader(" Authorization", sessionStorage.getItem('token'));
//发送数据
httpRequest.send(JSON.stringify(params));
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
success(JSON.parse(httpRequest.responseText));
}
if (httpRequest.readyState === 4 && httpRequest.status === 500) {
error(JSON.parse(httpRequest.responseText));
}
}
}
};