主要讲解内容
ajax的介绍,XML的介绍,以及HTTP协议。ajax发送请求,发送的就是http请求,把协议搞懂之后,可以在协议的这个层面,去观察数据的一个交换的过程
四种发送ajax的一个使用方式:原生,jQuery,fetch,axios,还有ajax一个跨域的问题
常见的一些例子
注册页面当中输入的用户名会发送ajax请求给服务器,去校验用户名是否存在,然后返回对应的结果,如果不可用,给一个提醒
京东里面的二级菜单栏等,按需加载,用户看到时候才发送请求(会有一个loading效果),用户不看的时候就不发送请求,利用率就会很高,整体页面的加载速度也会很快,所以ajax可以提高网页的加载速度
作用:ajax可以在页面不刷新的时候向服务器发送请求,实现数据的交换,这样的话数据交换会更快速,用户体验会更好
用 XML 表示:
<student>
<name>孙悟空</name>
<age>18</age>
<gender>男</gender>
</student>
检测node.js是否已经安装完毕,打开命令窗口进行检测即可,输入命令:node -v
express是基于node.js平台的,
实战
请求头信息的介绍
ajax原生发送post请求,配置自定义请求头的时候,在配置服务器当中缺少配置而报错
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AJAX POST 请求</title>
<style>
#result {
width: 200px;
height: 100px;
border: solid 1px #903;
}
</style>
</head>
<body>
<div id="result"></div>
<script>
const result = document.getElementById('result')
result.addEventListener('mouseover', function () {
const xhr = new XMLHttpRequest()
xhr.open('POST', 'http://127.0.0.1:8000/server')
// 设置请求头
// Content-Type 是预定义的请求头,而name是自定义的请求头
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.setRequestHeader('name', 'atguigu')
// 请求体可以设置任意格式的数据
xhr.send('a=100&b=200&c=300')
// xhr.send('a:100&b:200&c:300')
// xhr.send('124857999065')
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
result.innerHTML = xhr.response
}
}
}
})
</script>
</body>
</html>
错误图片展示:
解决方法:设置响应头,response.setHeader('Access-Control-Allow-Headers', '*')
// .all可以接受任何类型的请求,之前如果写post请求的话,还是会报错
app.all('/server', (request, response) => {
// 设置响应头,设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*')
// 响应头, *表示所有头的信息都可以接受
response.setHeader('Access-Control-Allow-Headers', '*')
// 设置响应体
response.send('HELLO AJAX POST')
})
两个的网址不一样,协议,域名,端口都不一样的话,就是跨域请求(向另外一个页面请求数据,如果协议,域名,端口都不一样的话,那就是跨域的请求,自己文件当中打开的页面的话,有些地址也是文件协议的,这个了解一下)
根据jsonp来发送跨域请求的话,如果没有结果出现,那就先启动服务器,或者ctrl+F强制刷新一下
bootCDN 一个网站,可以快速复制juery等网址到html文件当中
//xhr.responseXML 接收 xml 格式的响应数据
//xhr.responseText 接收文本格式的响应数据
xhr.onreadystatechange = function (){
if(xhr.readyState == 4 && xhr.status == 200){
var text = xhr.responseText;
console.log(text);
}
}
在网页有一些标签天生具有跨域能力,比如: img link iframe script 。
router.get("/testAJAX" , function (req , res) {
console.log("收到请求");
var callback = req.query.callback;
var obj = {
name:"孙悟空",
age:18
}
res.send(callback+"("+JSON.stringify(obj)+")");
});
router.get("/testAJAX" , function (req , res) {
//通过 res 来设置响应头,来允许跨域请求
//res.set("Access-Control-Allow-Origin","http://127.0.0.1:3000");
res.set("Access-Control-Allow-Origin","*");
res.send("testAJAX 返回的响应");
});
以上仅仅为笔记,后续会持续改进的!!