目录
(3)在浏览器中http://127.0.0.1:8000/
首先我们先明白什么是行 头 空行 体
(1)AJAX-express框架介绍
(1)安装环境
在项目的终端中打开,然后分别输入安装express环境
npm init --yes
npm i express
(2)express的使用
(1)在js文件中
-------------->
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.get("/", (request, response) => {
//设置相应
response.send("HELLO EXPRESS");
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
(2)启动:在终端中写入----->node 文件名.js
我的是node express.js
(3)在浏览器中http://127.0.0.1:8000/
(2)AJAX案例准备
(1)前端准备
<!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 GET 请求</title>
<style>
.result {
height: 100px;
width: 200px;
border: 1px solid #90b;
}
</style>
</head>
<body>
<button>点击发送请求</button>
<div class="result"></div>
</body>
</html>
效果
(2)js准备(改进之前写的)
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.get("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin" + "*");
//设置相应
response.send("HELLO EXPRESS");
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
主要变化
(3)AJAX请求的基本操作
<!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 GET 请求</title>
<style>
.result {
height: 100px;
width: 200px;
border: 1px solid #90b;
}
</style>
</head>
<body>
<button>点击发送请求</button>
<div id="result"></div>
<script>
//获取button元素
const btn = document.getElementsByTagName("button")[0];
const result = document.getElementById("result");
//绑定事件
btn.onclick = function () {
//1.创建对象
const xhr = new XMLHttpRequest();
//2.初始化 设置请求方法和url
xhr.open("GET", "http://127.0.0.1:8000/server");
//3.发送
xhr.send();
//4.事件绑定处理服务端返回的结果
// on 相当于when 当....时候
// readystate是 xhr 对象中的属性,表示状态0 1 2 3 4
// change改变
xhr.onreadystatechange = function () {
//判断(服务端返回了所有的结果,等于4正好结束)
if (xhr.readyState === 4) {
//判断响应状态码 200 404 403 401 500
//2xx成功(以2打头的就算成功)
if (xhr.status >= 200 && xhr.status < 300) {
//处理结果 行 头 空行 体
// console.log(xhr.status); //状态码
// console.log(xhr.statusText); //状态字符串
// console.log(xhr.getAllResponseHeaders()); //所有响应头
// console.log(xhr.response); //响应体
result.innerHTML = xhr.response;
}
}
};
};
</script>
</body>
</html>
效果
(1)AJAX设置请求参数
(4)AJAX发送POST请求
(1)改变html文件
和上面写的一样,就是把GET改成POST
xhr.open("POST", "http://127.0.0.1:8000/server");
会发现报错,因为没有和POST匹配
(2)修改js文件
只需要加一段就解决
app.post("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//设置响应
response.send("HELLO AJAX POST");
});
效果
(5)AJAX-POST设置请求体
(6)AJAX设置请求头信息
添加
我们需要添加一段
//设置请求头
xhr.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
--------------------------------------->
自定义请求头
//自定义
xhr.setRequestHeader("name", "liujiayi");
现在单纯主要写的话,会报错
但是还是可以看见
改进
完整代码
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.get("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//设置响应
response.send("HELLO AJAX");
});
app.all("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//响应头
response.setHeader("Access-Control-Allow-Headers", "*");
//设置响应
response.send("HELLO AJAX POST");
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
(7)AJAX-服务端响应JSON数据
首先给出完整的js文件
因为改的地方有点多
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.all("/json-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//响应头
response.setHeader("Access-Control-Allow-Headers", "*");
//响应一个数据
const data = {
name: "liujiayi",
};
//对对象进行字符串转化
let str = JSON.stringify(data);
//设置响应
response.send(str);
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
然后再给出html部分
(1)第一种自动转化
<!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 POST 请求</title>
<style>
#result {
width: 200px;
height: 100px;
border: 1px solid black;
}
</style>
</head>
<body>
<div id="result"></div>
<script>
const result = document.getElementById("result");
result.addEventListener("mouseover", function () {
//1.获取元素对象
const xhr = new XMLHttpRequest();
//设置响应体数据的类型
xhr.responseType = "json";
//2.初始化 设置请求方法和url
xhr.open("POST", "http://127.0.0.1:8000/json-server");
//设置请求头
xhr.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
//自定义
xhr.setRequestHeader("name", "liujiayi");
//3.发送
xhr.send();
//4.事件绑定处理服务端返回的结果
// on 相当于when 当....时候
// readystate是 xhr 对象中的属性,表示状态0 1 2 3 4
// change改变
xhr.onreadystatechange = function () {
//判断(服务端返回了所有的结果,等于4正好结束)
if (xhr.readyState === 4) {
//判断响应状态码 200 404 403 401 500
//2xx成功(以2打头的就算成功)
if (xhr.status >= 200 && xhr.status < 300) {
console.log(xhr.response);
result.innerHTML = xhr.response.name;
}
}
};
});
</script>
</body>
</html>
(2)手动转化
(8)介绍一个好用的自动重启工具
学到这,相信大家对每次对js文件进行微小的调整后,都要重新保存,再运行,十分麻烦。
现在介绍一个工具nodemon
安装
npm install -g nodemon
运行
npx nodemon express.js
(9) 解决IE缓存问题
主要改动如下,加一个时间戳
(10)请求超时与网络异常处理
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>AJAX GET 请求</title>
<style>
.result {
height: 100px;
width: 200px;
border: 1px solid #90b;
}
</style>
</head>
<body>
<button>点击发送请求</button>
<div id="result"></div>
<script>
//获取button元素
const btn = document.getElementsByTagName("button")[0];
const result = document.getElementById("result");
btn.onclick = function () {
const xhr = new XMLHttpRequest();
//超时设置 2s 设置
xhr.timeout = 2000;
//超时回调
xhr.ontimeout = function () {
alert("网络异常吗,请稍后重试!");
};
//网络异常回调
xhr.onerror = function () {
alert("你的网络似乎有点问题~");
};
xhr.open("GET", "http://127.0.0.1:8000/delay");
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
result.innerHTML = xhr.response;
}
}
};
};
</script>
</body>
</html>
js代码:
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.all("/delay", (request, response) => {
setTimeout(() => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.send("请求超时");
}, 3000);
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
(11)取消请求
abort意思如下
(12)请求重复发送问题
加一个状态判断
(13)jQuery发送AJAX请求
html部分代码:post请求以此类推
<!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>Document</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<div class="container">
<h2 class="page-header">jQuery发送AJAX请求</h2>
<button class="btn btn-primary">GET</button>
<button class="btn btn-danger">POST</button>
<button class="btn btn-info">通用型方法ajax</button>
</div>
<script>
$("button")
.eq(0)
.click(function () {
$.get(
"http://127.0.0.1:8000/jquery-server",
{ a: 100, b: 100 },
function (data) {
console.log(data);
}
);
});
</script>
</body>
</html>
js代码:
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.all("/jquery-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.send("jQuery发送AJAX请求");
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
(14)jQuery通用方法发送Ajax请求
首先给出初级代码;
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>Document</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<div class="container">
<h2 class="page-header">jQuery发送AJAX请求</h2>
<button class="btn btn-primary">GET</button>
<button class="btn btn-danger">POST</button>
<button class="btn btn-info">通用型方法ajax</button>
</div>
<script>
$("button")
.eq(2)
.click(function () {
$.ajax({
url: "http://127.0.0.1:8000/jquery-server",
data: { a: 100, b: 100 },
type: "GET",
//成功的回调
success: function (data) {
console.log(data);
},
});
});
</script>
</body>
</html>
js代码:
//1.引入express
const express = require("express");
//2.创建应用对象
const app = express();
//3.创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装
app.all("/jquery-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
const data = { name: "liujiayi" };
response.send(JSON.stringify(data));
});
//4.监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动,8000端口监听中...");
});
于是有:
结合之前的知识,把字符串变成对象
还可以加上这些配置:
(15)axios发送AJAX请求
url代码
<!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>axios发送AJAX请求</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button>GET</button>
<button>POST</button>
<button>AJAX</button>
<script>
const btns = document.querySelectorAll("button");
btns[0].onclick = function () {
//get请求
axios.get("http://127.0.0.1:8000/axios-server", {
//url参数
params: {
id: 1,
vip: 2,
},
});
};
</script>
</body>
</html>
成功!!!
接下来补充代码:(GET)
<!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>axios发送AJAX请求</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button>GET</button>
<button>POST</button>
<button>AJAX</button>
<script>
const btns = document.querySelectorAll("button");
btns[0].onclick = function () {
//get请求
axios
.get("http://127.0.0.1:8000/axios-server", {
//url参数
params: {
id: 1,
vip: 2,
},
//请求头消息
headers: {
name: "liujiayi",
age: 18,
},
})
.then((value) => {
console.log(value);
});
};
</script>
</body>
</html>
接下来写(POST)
<!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>axios发送AJAX请求</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button>GET</button>
<button>POST</button>
<button>AJAX</button>
<script>
const btns = document.querySelectorAll("button");
// btns[0].onclick = function () {
// //get请求
// axios
// .get("http://127.0.0.1:8000/axios-server", {
// //url参数
// params: {
// id: 1,
// vip: 2,
// },
// //请求头消息
// headers: {
// name: "liujiayi",
// age: 18,
// },
// })
// .then((value) => {
// console.log(value);
// });
// };
btns[1].onclick = function () {
axios.post(
"http://127.0.0.1:8000/axios-server",
{
userName: "liujiayi",
passWord: "20030313",
},
{
params: {
id: 2,
vip: 18,
},
headers: {
name: "liujiayi",
},
}
);
};
</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>axios发送AJAX请求</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button>GET</button>
<button>POST</button>
<button>AJAX</button>
<script>
const btns = document.querySelectorAll("button");
btns[2].onclick = function () {
axios({
url: "http://127.0.0.1:8000/axios-server",
//url参数
params: {
vip: 10,
id: 3,
},
//头信息
headers: {
a: 100,
b: 200,
},
//请求体参数
data: {
userName: "liujiayi",
passWord: "20030313",
},
});
};
</script>
</body>
</html>
(16)使用fetch函数发送AJAX请求
<!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>使用fetch函数发送AJAX请求 </title>
</head>
<body>
<button>AJAX请求</button>
<script>
const btn = document.querySelector("button");
btn.onclick = function () {
fetch("http://127.0.0.1:8000/fetch-server", {
//请求方法
method: "POST",
//请求头
headers: {
name: "fetch",
},
//请求体
body: "userName=admin&passWord=admin",
});
};
</script>
</body>
</html>
我之前用GET会报错POST不会~~~~
还可以加一下操作,我还不是太懂