文章仅作为个人学习过程的记录,知识点梳理,若有不严谨、不正确、需要补充的地方欢迎指出。
AJAX
先创建一个HTTP请求
const Http = XMLHttpRequest();
确定请求要发送到的url
cosnt url = 'https://segmentfault.com';
然后整合,发送请求
Http.open('GET', url, true); // 用于初始化一个请求,method,url,async
Http.send(); // 用于发送请求,调用后请求才会真的发出
POST请求时,需要处理请求参数,需要更新的数据data作为send()的参数。
Http.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 来设置请求头
Http.onerror = function(){}; // 来处理异常
Http.abort(); // 终止一个请求,调用后readyState变为0
response 响应的正文,返回类型由responseType决定
responseType 响应的数据类型,默认为text,可手动设置为"", "json", "text", "document", "blob", "arraybuffer"
事件回调
onreadystatechange 事件监听器对请求结果进行操作,属性变化时触发
Http.onreadystatechange = (e) => {
console.log(Http.response);
}
判断请求是否成功有两个属性,readyState和Status
Http.onreadystatechange = (e) => {
if(this.readyState === 4 && this.status === 200) {
console.log(Http.responseText);
}
}
readyState有五种值:
- 0:UNSEND => 已创建,但open()还未被调用
- 1:OPENED => open()已被调用
- 2:HEADERS_RECEIVED => send()已被调用,headers和status可用
- 3:LOADING => 加载中,拥有部分数据
- 4:DONE => 完成
onloadstart 在ajax请求之前(1 <= readyState <= 2)触发
onprogress 用资源总大小total和已经加载的大小loaded,计算加载进度
onload 资源加载完成触发,在其中处理返回值
onerror 资源加载失败触发,处理错误
ontimeout 请求超时调用,超时时间用timeout属性设置
JQuery
需要先引入jquery库才可以使用
$.ajax
最简单的方法之一,多个参数可选。get,post等都可实现。$.ajax({ url: 'https://segmentfault.com', type: 'GET', // or POST // data: data, // if the type is POST //dataType: JSON or HTML, XML, TXT, jsonp success: function(result) { console.log(result) }, error: function(err) { console.log(err) } })
$.get
用来执行GET请求,有两个参数 端点和回调函数$.get(url, function(data, status){ console.log(`${data}`); })
$.post
用来执行POST请求,有三个参数 端点,发送的数据和回调函数$.post(url, data, function(data, status){ console.log(`${data} and status is ${status}`); })
$.getJSON
仅用于获取json个数数据$.getJSON(url, function(result){ console.log(`${result}`); })
Fetch
一个功能强大的新的web API, 能发起异步请求。返回一个Promise对象,可以更聪明的处理异步请求。Promise详细介绍可查看ES6中Promise章节。
fetch(url, {
method: "POST", // or GET
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify(params), // POST时,传递更新数据,GET不需要
})
.then(data => {return data})
.catch(error => {return error})
Axios
开源的创建HTTP请求的库,也是返回一个Promise。首先要引入axios才能使用。
终端/命令行输入
npm install axios --save
文件中引入
import axios from 'axios'
或
基于axios,可以使用GET和POST来请求和发送数据
GET:
axios.get(url, params) // params 条件请求参数,可不填
.then(data => {console.log(data)})
.catch(err => {console.log(err)})
POST:
axios({
method: 'post',
url: url,
Content-Type: 'application/json', // multipart/form-data, application/x-www-form-urlencoded
data: {updateData}})
.then(data => {console.log(data)})
.catch(err => {console.log(err)})
参考资料: