Vue组件通信 eventBus

272 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

一、创建创建XMLHTTPRequest对象

二、连接和发送

  1. open(method,url,async):规定请求类型(POST或GET)、请求地址url、异步(true)同步(false).大多都是异步;

通过 AJAX,JavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本
  • 当响应就绪后对响应进行处理

2、GET请求方式是通过URL参数将数据提交到服务器的,POST则是通过将数据作为send的参数提交到服务器;

3、POST请求中,在发送数据之前,要设置表单提交的内容类型;

4、提交到服务器的参数必须经过encodeURIComponent()方法进行编码,实际上在参数列表“key=value”的形式中,key和value都需要进行编码,因为胡包含特殊字符。每次请求的时候都会在参数列表中拼入一个“v=xx”的随机字符串,这样是为了拒绝缓存,每次都直接请求到服务器上。

encodeURI():用于整个URI的编码,不会对本身属于URI的特殊字符串进行编码,如 : / ? # 其对应的解码函数decodeURI();

encodeURIComponent():用于对URI中的某一部分进行编码,会对它发现的任何非标准字符进行编码;其他对应的解码函数decodeURIComponent();

5、setRequestHeader(header,value):向请求添加请求头。header:规定头的名称,value:规定头的值

 

三、接收

1、接收到响应后,响应的数据会自动填充XHR对象,相关属性如下

  • responseText:获得字符串形式的响应数据;
  • responseXML:获得XML形式的响应数据;
  • status:响应的HTTP状态码;
  • statusText:HTTP状态的说明;

2、XHR对象的readyState属性表示请求/响应过程的当前活动阶段,这个属性的值如下

  • 0-未初始化,尚未调用open()方法;
  • 1-启动,调用了open()方法,未调用send()方法; 服务器连接已建立;
  • 2-发送,已经调用了send()方法,未接收到响应; 请求已接收;
  • 3-接收,已经接收到部分响应数据; 请求处理中;
  • 4-完成,已经接收到全部响应数据; 请求已完成;

只要 readyState 的值变化,就会调用 readystatechange 事件,(其实为了逻辑上通顺,可以把readystatechange放到send之后,因为send时请求服务器,会进行网络通信,需要时间,在send之后指定readystatechange事件处理程序也是可以的,我一般都是这样用,但为了规范和跨浏览器兼容性,还是在open之前进行指定吧)。

3、在readystatechange事件中,先判断响应是否接收完成,然后判断服务器是否成功处理请求,xhr.status 是状态码,状态码以2开头的都是成功,304表示从缓存中获取,上面的代码在每次请求的时候都加入了随机数,所以不会从缓存中取值,故该状态不需判断。