xhr.open(‘get’,‘/server’,true);
xhr.onreadystatechange=function(){
if(xhr.readyState!==4){
return
}
if(xhr.status>=200&&xhr.status<300){
console.log(xhr.responseText)
}
}
xhr.send(null)
3.timeout属性与ontimeout事件
- timeout属性表示请求在等待响应多少毫秒轴终止,如果在规定时间内没有接收到响应,那么就会触发ontimeout事件处理程序
const xhr=new XMLHttpRequest()
xhr.open(‘get’,‘/server’,true);
//将超市设置为3秒钟
xhr.timeout=3000;
//请求超时后请求会自动终止,会调用ontimeout事件处理程序
xhr.ontimeout=function(){
//处理代码
console.log(‘请求超时了’)
}
xhr.send(null);
4.overrideMimeType()方法
-
overrideMimeType()方法能够重写服务器返回的MIME类型,从而让浏览器进行不一样的处理。
-
假如服务器返回的数据类型是text/xml,由于种种原因浏览器解析不成功报错,这时就拿不到数据。为了拿到原始数据,我们可以把MIME类型改成text/plain,这样浏览器就不会去自动解析,从而我们就可以拿到原始文本了。
const xhr = new XMLHttpRequest()
xhr.open(‘get’, ‘/server’, true)
xhr.overrideMimeType(‘text/plain’)
xhr.send(null)
5.responseType属性
-
responseType属性是一个字符串,表示服务器返回数据的类型。使用xhr.response属性来接收
-
这个属性时可写的,可以在调用open()方法之后,send()方法之间设置这个属性值,告诉服务器返回指定类型的数据,如果responseType设为哦空字符串,等同于默认值text。
-
responseTye属性可以设置格式类型如下
| responseType属性的值 | response属性的数据类型与说明 |
| — | — |
| ”“ | String字符串 默认值,等同于text |
| ”text“ | String字符串 服务器返回文本数据 |
| ”document“ | Document对象 希望返回XML格式数据时使用 |
| ”json“ | javascript对象 IE10/IE11不支持 |
| ”blob“ | Blob对象 服务器返回二进制对象 |
| ”arrayBuffer | ArrayBuffer随心 服务器返沪二进制数组 |
-
当将reaponseType设置了一个特定类型时,你需要确保服务器返回的类型和你所设置的返回值类型时兼容的。如果两者类型不兼容,那么服务器返回的数据会变成null,及时服务器返回了数据
-
reaponseType只适用于异步请求,如果给同步请求设置了,那么将会抛出InvalidAccessError的异常
//使用responseTyep,以获取一张图片为例
const xhr=new XMLHttpRequest();
xhr.open(‘get’,‘/server/image.png’,true);
xhr.responseType=‘blob’//这里返回二进制类型的数据
xhr.οnlοad=function(){
if(xhr.status>=200&&xhr.status<300){
const blob=this.response
//…
}
}
xhr.send(null)
6.withCredentials属性
-
withCredentials属性是一个布尔值,表示跨域请求是否携带凭据信息(cookie、HTTP认证、以及客户端SSL证明等),默认为false
-
如果需要跨域Ajax请求发送Cookie,需要withCredentials属性设置为true
-
如果在同域下配置xhr.withCredentials,无论配置true还是fasle,效果都是一样的
//配置跨域
const xhr = new XMLHttpRequest();
xhr.open(‘get’,‘/server’,true);
xhr.withCredentials=true;
xhr.send(null)
-
当配置了withCredentials为true时,必须在后端增加response头信息Access-Control-Allow-Origin,且必须指定域名,而不能指定为*。
-
还需要添加Access-Control-Allow-Origin这个头信息为true;
//后端配置跨域
response.addHeader(“Access-Control-Allow-Origin”, “http://example.com”);
response.addHeader(“Access-Control-Allow-Origin”, true)
7.response属性
-
response属性表示服务器返回的数据,它可以时任何数据类型,比如字符串、对象、二进制对象等待,具体的类型由XMLHttpRequest.responseType属性决定
-
如果本次请求没有成功或者数据不完整,该属性等于null
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
console.log(xhr.response)
}
}
8.responseText属性
-
responseText属性返回从服务器接收到的字符串,该属性为只读
-
当readyState值为0、1、2时,responseText包含一个空字符串。当readyState值为3时(正在接收),响应中包含客户端还没完成的响应信息;当readyState为4时,此时响应已经完全接收,那么responseText包含完整的响应信息
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
// 处理服务器的返回数据
console.log(xhr.responseText)
}
}
9.responseXML属性
-
如果相应的内容类型时”text/xml“或者”appliction/xml“,这个属性中将保存着包含响应数据的HTML或者XML文档对象;该属性为只读类型
-
无论内容类型是什么,响应主体的内容都会保存到responseText属性,而对于非XML数据而言,responseXML属性的值将为null
10.responseURL属性
responseURL属性时字符串,表示发送数据的服务器的地址,如果URL为空,则返回空字符串。如果URL有锚点,则位于URL#后面的内容会被删除。如果服务器端发生跳转,这个属性返回最后实际返回数据 的地址
const xhr=new XMLHttpReauest();
xhr.open(‘GET’,‘http://example.com/test’,true);
xhr.οnlοad=function(){
//返回http://example.com/test
console.log(xhr.responseURL)
}
xhr.send(null)
11.status属性(HTTP状态码)
-
这个属性描述了HTTP状态码,属性返回一个整数。同时,当且仅当readyState值为3时(正在接收)和readyState=4时,这个属性才可以使用后。
-
若在reagyState值小于3时试图取status的值,将会引发一个异常
-
status的值有:200表示成功,404表示为找到资源
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
// 处理服务器的返回数据
}
}
12.statusText属性
-
statusText属性返回一个字符串,表示服务器发送的状态数目。比如ok和 Not Found。在请求发送之前,该属性的值是一个空字符串,如果服务器没有返回状态提示,该属性默认为欸OK。该属性为只读属性
-
注意:要通过检测status属性来决定下一步的操作,不要依赖statusText,因为statusText在跨浏览器使用时不太可靠
1.4XMLHTTPRequest对象的方法详细说明
1.4.1.XMLHTTPRequest对象的方法
| 方法 | 描述 |
| — | — |
| abort() | 停止当前请求 |
| getAllResponseHeaders() | 把HTTP请求的所有响应首部作为键/值对返回 |
| getResponseHeader(“header”) | 返回指定首部的串值 |
| open(“method”,“url”,async) | 建立与服务器的连接,methos参数可以是GET、POST或者PUT等;url参数时相对的url或者绝对url。 |
| send(content) | 向服务器发送请求 |
| setRequestHeader(“header”,“value”) | 把指定的首部设置提供的值,注意:在设置任何首部之前必须在调用open()方法和send()方法之后设置 |
1.4.2.XMLHttpRequest对象方法的详细使用
1.open()方法-----用于初始化一个请求
open()方法接收三个参数:
-
第一个参数methos:要发送请求的类型。比如GET、POSE、PYT等。
-
第二个参数url:请求的URL
-
第三个参数async:是否异步发送请求的布尔值。true为异步发送请求。
const xhr=new XMLHttpRequest();
xhr.open(‘get’,‘/userInfo’,true)
- 调用open()
方法并不会真正的发送请求,而是启动一个琼琼以备发送;
2.send()方法-----用于发送HTTP请求
send()方法接收一个参数:
-
参数data:作为请求主体发送的数据,如果不需要通过请求主体数据(即不传实际的data时),也必须传入null。
-
参数data可以接收字符串、FromData(From表单)、Blob、ArrayBuffer等类型数据
const xhr=new XMLHTTPRequest();
xhr.send(null);
3. setRequestHeader()方法
-
setRequestHeader()方法可以设置自定义的请求头部信息
-
接收两个参数:
第一个参数header:头部字段的名称
第二个参数value:头部字段的值
- 要成功发送请求头部信息。,此方法必须在open()和send()之间调用
const xhr=new XMLHttpRequest();
xhr.open(‘get’,‘/server’,true);
xhr.setRequestHeader(‘MyHeader’,‘MyValue’);
xhr.send(null)
4.abort()方法和onabort事件
-
在接收响应之前调用abort()方法来取下异步请求。当一个请求被终止后,那么它的readyState属性将被置为0.在终止请求之后,还应该对XMLHttpRequest对象进行解引操作。
-
当调用abort()之后,会触发onabort事件
//abort()方法
const xhr=new XMLHttpRequest();
xhr.open(‘get’, ‘/server’, true);
xhr.οnabοrt=function(){
console.log(‘请求被终止’);
}
xhr.send(null);
//将会调用我们在上面定义的onabort回调函数
xhr.abort()
1.5 XMLHttpRequest进度事件相关的API
1 onload
-
当请求成功,接收到完整的现溢数据时触发
-
可以使用onload事件来替代readtstatechange事件,因为响应接收完毕后将触发onload事件,因此就没有必要检查readyState属性了。只要浏览器接收到服务器的响应,不管其状态如何,都会触发load事件
//使用onload事件来监听服务器的响应
const xhr = new XMLHttpRequest();
//当服务器响应完成时便会触发load事件
xhr.onload = function onload() {
console.log(‘请求数据接收完毕’)
if (xhr.status >= 200 && xhr.status < 300) {
console.log(xhr.responseText)
}
}
xhr.open(‘get’, ‘/server’, true);
xhr.send(null);
2.onerror
设置当请求失败时的监听函数
xhr.οnerrοr=function(){
//
console.log(‘请求失败’);
}
1.6 请求方式
1.6.1 GET请求
-
将查询字符串参数追加到URL的末尾,将信息发送给服务器
-
GET参数的编码方式使无法认为干涉的,这导致了不同浏览器有不同的编码方式,因此最稳妥的使人工预编码,人工编码,人工解码,从而禁止浏览器的编码干涉
//GET请求的人工预编码
const xhr=new XMLHttpRequest();
//使用encodeURIComponent()进行编码
xhr.open(‘get’, ‘/server’, true);
const temParam=encodeURIComponent(‘age’);
const temValue=encodeURIComponent(‘20’);
xhr.open(‘get’,‘/server?temParam=tempValue&money=100’,true)
1.6.2 POST请求
- POST请求把数据作为请求的主体(请求的body)提交,下面四种常见的PSET请求提交数据方式
1)application/json
当发送Ajax请求时,把appliction/json作为请求头,用来告诉服务器消息主体是序列化后的JSON字符串
2)text/xml
使用HTTP作为传输协议,XML作为哦编码方式的远程调用规范
3)application/x-www-form-urlencoded
浏览器原生form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据
4)multipart/form-data
表单上传文件时,必须让form表单的enctype等于multipart/form-data
- 举例如下
使用XMLHttpRequest模拟表单提交
将Content-Type头部信息设置为application/x-www-form-urlencoded。可以使用XMLHttpRequest对象来模仿表单提交。
const xhr = new XMLHttpRequest()
xhr.open(‘post’, ‘/server’, true)
xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’)
const form = document.getElementById(‘myForm’)
// serialize()为表单序列化方法
xhr.send(serialize(form))
也可以使用XMLHttpRequest level 2的FormData来序列化表单数据。
const xhr = new XMLHttpRequest()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。
技术停滞不前!**
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-h7nd59uH-1712395687207)]
[外链图片转存中…(img-YzdkWkZK-1712395687208)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-UaU44xfh-1712395687208)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。