前言
Ajax
前后端通信技术,简单学习并记录。
HTTP
协议与请求内容
HTTP
协议,【超文本传输协议】,规定了浏览器和万维网之间相互通信的规则,
请求报文
重点是格式与参数
1 2 3 4 5 6 7
| 行 POST /s?ie=utf-8 HTTP/1.1 头 Host: baidu.com Cookies: name=guigu Content-type: text/html User-Agent: chrome 3 空行 (必须有,但为空) 体 username=admin&password=adimn
|
响应报文
1 2 3 4 5 6
| 行 HTTP1.1(http版本) 200(相应状态码) OK(状态字符串) 头 Content-type: text/html Content-length: 2048 Content-encoding: gzip 空行 (必须有,但为空) 体 http 内容
|
AJAX 请求的基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| const btn = document.getElementsByTagName("button")[0]; const result = document.getElementsById("result");
tn.onclick = function(){
const xhr = new XMLHttpRequest()
xhr.open("GET", "http://127.0.0.1/server")
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){ 2xx 都表示成功 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 } } } }
|
设置 url 参数
在 url
后面加 ?a=100...
AJAX 发送 POST 请求
不带参数
1 2 3 4 5 6 7 8 9 10 11 12
| const result.getElementById("result")
result.addEventListener("mouseover", function(){ })
|
带参数请求
1 2 3 4 5
| ...
xhr.send("a=100&b=200&c=300"); xhr.send("a:100&b:200&c:300"); ...
|
AJAX 设置请求头信息
1 2 3
|
xhr.setRequestHeader("Content-Typt", "text/html");
|
服务端返回 JSON
1 2 3 4 5 6 7 8 9 10
| let data = JSON.parse(xhr.response); result.innerHTML = data.name; xhr.responseType = "json" ...
|
请求超时与网络异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
xhr.timeout(2000)
xhr.ontimeout = function(){ ... }
xhr.onerror = function(){ ... }
xhr.abort()
|
防止重复发送请求
jQuery 发送 Ajax 请求
GET 方法
1 2 3 4 5 6 7 8
| $("button").click(function(){ $.get("http://127.0.0.1:8000", {a: 100, b:200}, function(data){ console.log(data); }) })
|
POST 方法
1 2 3 4 5 6 7 8 9
| $("button").click(function(){ $.post("http://127.0.0.1:8000", {a: 100, b:200}, function(data){ console.log(data); }, "json") })
|
通用型 AJAX 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $.("button").click(function(){ $.ajax({ url: 127.0.0.7:8000, data: {a:100, b:200}, type: "GET", dataType: "json", success: funtion(data){ console.log(data); } timeout: 2000 error: funtion(){ console_log("xxx") } }) });
|
Axios 发送 AJAX 请求
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
get 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| axios.defults.baseURL = "http://137.0.0.1:8080"
axios.get("http://127.0.0.7:8000", { param: { id: 100, vip: 7, }, headers: { name: "xiaoming", age: 18 },
})
|
数据返回和处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| axios.defults.baseURL = "http://137.0.0.1:8080"
axios.get("http://127.0.0.7:8000", { param: { id: 100, vip: 7, }, headers: { name: "xiaoming", age: 18 }, }).then(value => { console.log(value); })
|
post 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| axios.defults.baseURL = "http://137.0.0.1:8080"
axios.get("http://127.0.0.7:8000", { username: "admin", password: "admin", }, { param: { id: 100, vip: 7, }, headers: { name: "xiaoming", age: 18 }, data: 100 })
|
ajax 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| axios.ajax({ method: "GET", url: "127.0.0.7:8000", params: { vip: 10, level: 60, }, headers: { a: 100, b: 200, }, data: { username: "admin", password: "admin", } }).then(response => { console.log(response); })
|
fetch 函数发送 ajax 请求
使用方法
fetch(input[, init])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| fetch("http://127.0.0.1:8000", { method: "POST", headers: { name: "xiaoming", age: 18, }, body: "username=admin&password=admin"} }).then(response => { return response.json() }).then(response => { console.log(response) })
|
参考文章