AJAX简介
- 异步的JS和XML
- 通过AJAX可以在浏览器中向服务器发送异步请求:
- 优点:
- 缺点:
- 没有浏览历史,不能回退
- 存在跨域问题:a.com不能向b.com发送请求 / 同源可以,既协议、主机、端口一致
- SEO(搜索引擎优化)不友好:源代码里没有响应体
HTTP
请求
1 2 3 4 5 6 7
| 行 GET/POST URL HTTP/1.1<协议版本> 头 Host:wayneblog.com Cookie: name=wayne Content-type: application/x-www-form-urlencoded User-Agent: chrome 83 空行 体 username=admin&password=admin
|
响应
1 2 3 4 5 6
| 行 HTTP/1.1 200 OK 头 Content-Type: text/html;charset=utf-8 Content-length: 2048; Content-encoding: gzip 空行 体 <HTML>
|
Express基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const express = require("express");
const app = express();
app.get("/", (request, response)=>{ response.setHeader("Access-Control-Allow-Origin", "*"); });
app.listen(8000, () => { response.send("server begin!"); })
|
基本使用
POST设置请求体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const xhr = new XHMHttpRequest(); xhr.open("POST", "http://127.0.0.1:8000/server");
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send();
xhr.onreadystatechange = function() { if(xhr.readyState === 4) { if(xhr.status >= 200 && xhr.status < 300) { result.innerHTML = xhr.response; } } }
|
响应JSON数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const data = {...} let str = JSON.stringify(data); response.send(str);
let data = JSON.parse(xhr.response);
const xhr = new XHMHttpRequest(); xhr.responseType = "json"; ... xhr.response.name
|
AJAX请求超时
1 2 3 4 5 6 7
| const xhr = new XHMHttpRequest();
xhr.timeout = 2000;
xhr.ontimeout = function() {...};
xhr.onerror = function() {...}
|
AJAX手动取消请求:解决重复发送问题
1 2 3 4
| let x = null; x = new XHMHttpRequest(); if(isSending) xhr.abort(); x = new XHMHttpRequest();
|
JSONP
- JSONP利用
<script>
标签跨域,返回一个函数调用,其参数就是data
- 只能
get
CORS (Cross-Origin Resource Sharing) 跨域资源共享
1 2 3
| response.setHeader("Access-Control-Allow-Origin", "*") response.setHeader("Access-Control-Allow-Headers", "*") response.setHeader("Access-Control-Allow-Method", "*")
|