AJAX 总结:ajax请求的几种方法。
首先我们得知道AJAX是干嘛的,为什么要学习它把。
这里我看了一个博客,写的挺好。传送门:看这一篇就够了!-Ajax详解_Oriental_的博客-CSDN博客。
第二个重要的是 你要知道http协议中的请求报文和响应报文,要不学的一脸懵。
请求报文:
请求行,请求头,请求空行,请求体。
借一个博主文章讲一下请求报文。
第一行就是请求行,请求行中含有请求方法,请求URL,还有HTTP协议版本。
下面的圈4全部都是请求头,请求头是关键字/值对的形式。最下面的一行就是请求体,注意GET方法没有请求体 POST方法有请求体。
get请求方法主要用于客户端向服务端请求数据,post方法主要是用于客服端向服务端传输数据
响应报文:
响应行,响应头,响应空行,响应体。
第一行是相应行有报文协议和状态码及状态描述
圈3是响应头,圈4就是我们最想要的响应体数据了。
想要更加了解就去看这个HTTP请求行、请求头、请求体详解_kdsde的专栏-CSDN博客博客吧,他讲的真的超级好。
AJAX基础用法:原生js使用
const btn = document.querySelector("button");
var div = document.querySelector("div");
btn.onclick = function() {
//创建对象
const xhr = new XMLHttpRequest();
//初始化 设置请求方法和url 设置请求参数多个参数用&分开
xhr.open('GET', 'http://127.0.0.1:8000/server?a=100');
//发送
xhr.send();
//事件绑定,onreadystatechange readystate是xhr对象中的属性,表示状态 0初始化 1open方法调用完毕 2send方法调用完毕 3服务端返回的部分结果 4服务端返回的所有结果
xhr.onreadystatechange = function() {
//判断服务端返回了所有的结果
if (xhr.readyState === 4) {
//判断是否响应成功 xhr.status状态码 xhr
if (xhr.status >= 200 && xhr.status < 300) {
//处理结果
//响应行
// console.log(xhr.status); //状态码
// console.log(xhr.statusText); //状态字符串
// console.log(xhr.getAllResponseHeaders()); //所有响应头
// console.log(xhr.response); //响应体
div.innerHTML = xhr.response;
} else {
alert("出错了,请重新尝试");
}
}
};
}
基础用法可以分几步:
1.创建对象
2.初始化,也就是设置你的请求方法还有URL
3.发送请求
4.事件绑定,判断请求是否成功后处理数据
可以通过xhr.setRequestHeader()方法设置自定义的请求头,如果设置的不是预定义的需要再服务端设置:
//设置允许自定义的响应头
app.all('/json-server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*');
//设置允许自定义的响应头
response.setHeader('Access-Control-Allow-Headers', '*');
//响应一个数据
const data = {
name: '1',
age: '18'
}
//转换为string
let str = JSON.stringify(data);
//设置响应体
response.send(data)
});
response.setHeader('Access-Control-Allow-Headers', '*');
然后把app.get改为app.all。
还有一个细节:这边响应数据,需要通过JSON.stringify()方法转换为字符串
jQuery使用AJAX:
$('button').eq(0).click(function() {
$.get('http://127.0.0.1:8000/server', {
a: 100,
b: 200
},
function(data) {
console.log(data);
}, 'json')
})
$('button').eq(1).click(function() {
$.post('http://127.0.0.1:8000/serverjqu', {
a: 100,
b: 200
},
function(data) {
console.log(data);
})
})
$('button').eq(2).click(function() {
$.ajax({
url: 'http://127.0.0.1:8000/server',
data: {
a: 100,
b: 20
},
type: 'GET',
//响应体类型:
dataType: 'json',
success: function(data) {
console.log(data);
},
//失败的回调
error: function() {
console.log("出错了");
},
//超时时间
timeout: 2000,
//头信息
})
})
a和b都是url 后面的参数
Axios 发送AJAX请求:
const btn = document.querySelectorAll('button');
//配置 baseURL 给url做一简化
axios.defaults.baseURL = 'http://127.0.0.1:8000';
btn[0].onclick = function() {
axios.get('/axios-server', {
// url参数
params: {
id: 100,
vip: 7
},
//请求头信息
headers: {
age: 20
}
}).then(value => {
console.log(value);
});
}
btn[1].onclick = function() {
axios.post('/axios-server', {
//请求体
username: 'wuyang1',
paddwd: 'a6491666'
}, {
// url参数
params: {
id: 10,
vip: 70
},
headers: {
height: 100
}
})
}
btn[2].onclick = function() {
axios({
url: '/axios-server',
params: {
qq: 2414821184,
level: 66
},
headers: {
a: 600
},
data: {
user: 'wu6'
}
}).then(response => {
console.log(response);
//响应状态码
console.log(response.status);
//响应状态字符串
console.log(response.statusText);
//响应头
console.log(response.headers);
//响应体
console.log(response.data);
})
}
相对于上面的方法,我比较喜欢用这个axios库,因为它简洁明了。
使用的时候需要引入:axios/axios: Promise based HTTP client for the browser and node.js (github.com)在这个网站上面可以找到,还有一些使用方法。
fetch函数发送请求:
const btn = document.querySelector('button');
btn.onclick = function() {
fetch('http://127.0.0.1:8000/fetch-server', {
//请求方法
method: 'POST',
//请求头
headers: {
name: 'wu'
},
body: 'username'
}).then(response => {
return response.text();
})
}