level 1
我们现在所用到的Ajax技术的核心就是XHR对象。
而XHR为客户端向服务器发送请求以及解析服务器相应提供了流畅的接口,通过它很容易取回一个url上的资源数据。
这就意味着用户点击之后,不用刷新页面也能获取新的数据,然后再通过DOM将新数据插入到页面中。
到现在为止,也催生出了许多新技术和新模式,但熟练使用XHR对象仍然是前端开发人员必须掌握的一种技能。
虽然它名字含有XML ,但该对象可以接受任何数据类型而不仅仅为XML,而且它支持的协议类型不限于HTTP(包括file,ftp)
发起一个完整的请求有如下几步:
第一步:创建XHR对象
XMLHttpRequest是一个构造函数,因此在使用它的时候,首先将它实例化:
var xhr = new XMLHttpRequest();
第二步:向服务器发送请求
在获得一个实例化的xhr对象后,要调用两个方法以发送请求,open和send。
第一个方法是open(),open方法并不会发送请求,它只是启动一个请求以备发送,它可以接受3个参数。
xhr.open(“GET”, ”xxx.jsp", false);
第一个参数指定发送请求的方式,是一个字符串,不区分大小写,但通常惯例都是使用大写字母。
其中GET和POST是最常用的方式。
GET是用于常规请求,请求的参数也会包含在url中。
POST请求时,参数会带在request body上,经常用于表单上。
他们还有各自的语义,一个是获取一个是发送。
除了GET和POST外,这个参数还可以是PUT, DELETE等。
但到底应该怎么用,还需要大家在项目中去历练一下,并且很可能还需要和后端开发人员商量。
第二个参数指明文件在服务器上的位置,而且只能向同一个域当中使用相同端口和协议的url发送,否则就是跨域,跨域的问题我们后面会讲到。
第三个参数是一个可选参数,是个布尔值,true表示异步,false表示同步,默认为true。
一般情况下我们都会用true,如果设置为false的话,请求就会变成同步请求。
也就是说JS代码执行到这里时,会等待服务器响应后才继续执行。
如果网络不是快到光速一样,那整个程序就会挂起停止:
我们的直观感受就是页面一直卡到内容有响应了才回来继续执行,我们先使用同步,等会儿来看异步。
第二个方法是使用send(),这个方法接收一个参数,就是要发送的数据,如果没有数据就是null,调用这个方法后,请求就会被分派到服务器了:
xhr.send(null);
第三步:服务器响应
在请求发送后,接下来就是要接收服务器的相应了
在收到响应后,响应的数据会自动填充到XHR对象的属性上,相关的属性有这么几个:
responseText:响应所返回的文本,无论内容类型是什么,响应主体的内容都会保存到这个属性上
responseXML:XML形式的响应数据
status:响应的http状态,数字类型。状态码有非常多,我们最熟悉的就是200表示成功,404表示没有找到资源,更多的就大家自行去查看。
statusText:响应的http状态说明,文本类型
readyState:表明请求的状态,是一个整数
onreadystatechange:指派在请求的状态变化是所调用的事件
2018年10月12日 01点10分