Ajax XMLHttpRequest & 跨域
一.XMLHttpRequest:
-
XMLHttpRequest是浏览器内置的一个构造函数
-
作用:基于 new 出来的 XMLHttpRequest 实例对象,可以发起 Ajax 的请求。 axios 中的 axios.get()、axios.post()、axios() 方法,都是基于 XMLHttpRequest(简称:XHR) 封装出来的!
1.使用 XMLHttpRequest 发起 GET 请求:
主要的 4 个实现步骤:
-
创建 xhr 对象
-
调用 xhr.open() 函数
-
调用 xhr.send() 函数
-
监听 load 事件
<script> let xhr = new XMLHttpRequest(); xhr.open('GET', 'http://xxx.com/api/xx'); xhr.send(); xhr.addEventListener('load', function () { console.log(this.response); }) </script> 复制代码
2.请求时携带URL参数 或 提交请求体 :
- URL参数,只能拼接在 URL 地址 后面
- 请求体,放到 send() 里面
<script>
let xhr = new XMLHttpRequest();
// 将请求参数拼接到url后面
xhr.open('请求方式', 'http://www.itcbc.com/api/xx?id=1&username=zhangsan');
xhr.send(请求体);
xhr.addEventListener('load', function () {
console.log(this.response);
})
</script>
复制代码
3.提交请求体数据,需指定Content-Type头:
- 当需要提交请求体数据时,需要在 xhr.open() 之后,调用 xhr.setRequestHeader() 函数,指定请求体的编码格式
<script>
let xhr = new XMLHttpRequest();
// 将请求参数拼接到url后面
xhr.open('POST', 'http://www.itcbc.com/api/post');
// 根据请求体格式的不同,需设置对应的Content-Type头
xhr.setRequestHeader('Content-Type', '值')
xhr.send('username=zs&age=20');
xhr.addEventListener('load', function () {
console.log(this.response);
})
</script>
复制代码
4.请求体格式 和 对应的Content-Type值:
为了方便服务器接收数据,当提交请求体时,需要指定一个叫做Content-Type的请求头
1.请求体格式 -> Content-Type -> 是否需要在代码中指定
① 参数=值&参数=值 -> application/x-www-form-urlencoded -> 是
② ‘{ “id”: 1, “name”: “zs” }’ -> application/json -> 是
③ new FormData() -> multipart/form-data; xxxxxxxxx随机字符-> 否,浏览器自 动设置
- 例:xhr.setRequestHeader(‘Content-type’, ‘application/x-www-form-urlencoded’)
2.使用axios就不用关心这个请求头了,因为axios已经帮我们处理好了加请求头这件事,不过写原生代码,就需要自己指定了
二.数据交换格式:
数据交换格式,就是服务器端与客户端之间数据传输的格式
两种数据交换格式:
- XML(很少用)
- JSON(主流)
1.什么是 JSON:
- JSON(全称:JavaScript Object