JavaScript笔记整理 —— XMLHttpRequest对象
2016-07-03 14:13
573 查看
XMLHttpRequest()方法是由JavaScript创建的HTTP请求对象(构造器)。值得一提的是,它最在是在IE中实现的(在IE中他叫做ActiveX)。
目前,它已被所有现代浏览器所支持,是一种跨浏览器技术——Ajax应用。
实际上,Ajax可以看做是由Js和XML之间建立的异步联系。
XHR对象是由Js代码创建的。
XML, 最初创建的HTTP请求是用来获取XML文档,XML文档中包含了需要响应给页面的信息。但是现在这种做法已经不多见了。
异步,是指当代码在发送HTTP请求之后,无需停下来等待浏览器响应,可以继续执行其它任务。等到相关信息到达时自然会收到通知(通常以事件的形式出现)。
处理响应——当服务器的响应信息到达时事件监听器会收到通知,之后相应的代码就会执行。
注意:HTTP请求类型(GET\POST\HEAD等)中,GET和POST最常见。当需要发送的数据不是很多,且不会改写服务器数据时,我们一般会用GET类型,否则就会使用POST类型。
第一个参数:请求类型。
第二个参数:所要请求目标的URL;
第三个参数:布尔值,为true时请求按照异步方式进行,否则,就为false.
只要我们愿意,可以使用send()方法在发送请求时附带上任何数据。
对于GET请求,这里发送的是空字符串。因为数据被包含在了URL中。
对于POST请求,它是表单数据中的一个查询字符串key=value&key2=value2。
当请求被发送之后,我们的代码就可以将注意力转向到其它任务。等到收到服务器的响应时,会自动启动回调函数myCallback。
每隔XHR对象中都有一个叫做readyState的属性,一旦我们改变了这个属性,那么就会触发readystatechange事件。
readystate可能的状态值如下:
0 —— 未初始化状态。
1 —— 载入请求状态。
2 —— 载入完成状态。
3 —— 请求交互状态。
4 —— 请求完成状态。
HTTP请求的状态码:
404 —— 目标URL不存在(未找到文件)
400 —— Bad Request 请求出现语法错误。
500 —— Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
200 —— OK 一切正常,对GET和POST请求的应答文档跟在后面。
当readystste值为4时,就意味着服务器的相应信息已经返回。可以开始处理了。而处理响应的事件回调函数除要确认readystate的值是4之外,还要检查HTTP请求状态码。检查HTTP请求状态码通过XHR对象的status属性来获得。
一旦,
目前,它已被所有现代浏览器所支持,是一种跨浏览器技术——Ajax应用。
实际上,Ajax可以看做是由Js和XML之间建立的异步联系。
XHR对象是由Js代码创建的。
XML, 最初创建的HTTP请求是用来获取XML文档,XML文档中包含了需要响应给页面的信息。但是现在这种做法已经不多见了。
异步,是指当代码在发送HTTP请求之后,无需停下来等待浏览器响应,可以继续执行其它任务。等到相关信息到达时自然会收到通知(通常以事件的形式出现)。
XMLHttpRequest对象用法,分两个步骤:
发送请求——先构建XMLHttpRequest对象,然后为它设置事件监听器。处理响应——当服务器的响应信息到达时事件监听器会收到通知,之后相应的代码就会执行。
一、发送请求
var xhr = new XMlHttpRequest(); //实例化一个XMLHttpRequest对象 xhr.onreadystatechange = myCallback; // 设置一个触发onreadystatechange事件的事件监听器 xhr.open('GET', 'somefile.txt', true); xhr.send(''); //发送请求
注意:HTTP请求类型(GET\POST\HEAD等)中,GET和POST最常见。当需要发送的数据不是很多,且不会改写服务器数据时,我们一般会用GET类型,否则就会使用POST类型。
xhr.open('GET', 'somefile.txt', true);
第一个参数:请求类型。
第二个参数:所要请求目标的URL;
第三个参数:布尔值,为true时请求按照异步方式进行,否则,就为false.
xhr.send('');
只要我们愿意,可以使用send()方法在发送请求时附带上任何数据。
对于GET请求,这里发送的是空字符串。因为数据被包含在了URL中。
对于POST请求,它是表单数据中的一个查询字符串key=value&key2=value2。
当请求被发送之后,我们的代码就可以将注意力转向到其它任务。等到收到服务器的响应时,会自动启动回调函数myCallback。
二、处理响应
上面我们已经创建了XHR对象,并给它添加了一个readystatechange事件监听器。每隔XHR对象中都有一个叫做readyState的属性,一旦我们改变了这个属性,那么就会触发readystatechange事件。
readystate可能的状态值如下:
0 —— 未初始化状态。
1 —— 载入请求状态。
2 —— 载入完成状态。
3 —— 请求交互状态。
4 —— 请求完成状态。
HTTP请求的状态码:
404 —— 目标URL不存在(未找到文件)
400 —— Bad Request 请求出现语法错误。
500 —— Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
200 —— OK 一切正常,对GET和POST请求的应答文档跟在后面。
当readystste值为4时,就意味着服务器的相应信息已经返回。可以开始处理了。而处理响应的事件回调函数除要确认readystate的值是4之外,还要检查HTTP请求状态码。检查HTTP请求状态码通过XHR对象的status属性来获得。
一旦,
xhr.readystate的值为4且
xhr.status的值为200时,就可以通过
xhr.responseText来访问目标URL中的内容了。
function myCallback() { if ( xhr.readystate < 4 ) { return; } if ( xhr.status !== 200 ) { alert('Error!'); return; } alrt( xhr.responseText ); }
三、兼容IE7-
以下代码,是一个完整的跨浏览器解决方案:// 所要创建对象的标示符,以下是三个不同版本 var ids = ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; var xhr; if ( XMLHttpRequest ) { xhr = new XMLHttpRequest(); } else { // 针对早于IE7的浏览器 for ( var i = 0; i < ids.length; i++ ) { try{ xhr = new ActiveXObject( ids[i] ); break; } catch( e ) {}; } }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享