AJAX学习笔记1:XHR对象介绍
创建Ajax对象的跨浏览器兼容方法Ajax 技术的核心是 XMLHttpRequest 对象(简称 XHR),这是由微软首先引入的一个特性,其他浏览器提供商后来都提供了相同的实现。IE5 是第一款引入 XHR 对象的浏览器。在 IE5 中, XHR 对象是通过 MSXML 库中的一个 ActiveX对象实现的。因此,在 IE 中可能会遇到三种不同版本的 XHR 对象,即 MSXML2.XMLHttp、MSXML2.XMLHttp.3.0 和 MXSML2.XMLHttp.6.0。因此,创建XHR对象应该是用一个函数: //适用于 IE7 之前的版本 function createXHR(){ if (typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len; for (i=0,len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //跳过 } } } return new ActiveXObject(arguments.callee.activeXString); } 鉴于IE7+、 Firefox、 Opera、 Chrome 和 Safari 都支持原生的 XHR 对象,在这些浏览器中创建 XHR 对象要像下面这样使用 XMLHttpRequest 构造函数。 var xhr = new XMLHttpRequest(); 在必须支持IE7以下版本时,必须使用以下函数: function createXHR(){ /*如果浏览器支持原生XMLHttpRequest对象,返回用原生对象创建的XMLHttpRequest对象*/ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ //否则使用MSXML库的ActiveX对象创建 if (typeof arguments.callee.activeXString != "string"){ var versions = [ "MSXML2.XMLHttp.6.0",len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //跳过 } } } return new ActiveXObject(arguments.callee.activeXString); } else { //都不支持则返回错误 throw new Error("No XHR object available."); } } 创建对象的浏览器兼容方式是 XHR对象的两个方法open():它接受 3 个参数:要发送的请求的类型("get"、 "post"等) 、请求的 URL 和表示是否异步发送请求的布尔值(true代表异步,false代表同步,默认是是异步)。下面就是调用这个方法的例子。 send()方法: 在收到响应后,响应的数据会自动填充 XHR 对象的属性,相关的属性简介如下。 readyState 属性XHR 对象的 readyState 属性表示请求/响应过程的当前活动阶段。这个属性可取的值如下。 var xhr = createXHR(); xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ //每次readyState改变都检查一次,仅当4时才真正作用 //如果状态码>200且<300,或者为304,输出响应文本 if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ alert(xhr.responseText); } else { alert("Request was unsuccessful: " + xhr.status); } } }; xhr.open("get",true); //添加onreadystatechange事件后使用open()方法 xhr.send(null); XHR的两种请求方式:GET and POSTGET请求: xhr.open("get","example.php?name1=value1&name2=value2",true); POST请求:通常用于向服务器发送应该被保存的数据。 POST 请求应该把数据作为请求的主体提交,而 GET 请求传统上不是这样。 POST 请求的主体可以包含非常多的数据, xhr.open("post",true); 发送 POST 请求的第二步就是向 send()方法中传入某些数据。由于 XHR 最初的设计主要是为了处理 XML,因此可以在此传入 XML DOM 文档,传入的文档经序列化之后将作为请求主体被提交到服务器。当然,也可以在此传入任何想发送到服务器的字符串。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 详解Oracle在out参数中访问光标
- \/\*.*\*\/ 正则表达式 notepad++
- objective-c – 线程1:EXC_BREAKPOINT(代码= EXC_i386_BPT
- 为什么makefile坚持编译不应该编译的东西?
- Vue组件化通讯的实例代码
- 在C#和DLL之间传递数组数据(两个方向)
- XML学习笔记(三):XML规范:Schema详解
- 【技术干货】浅谈 Hybrid App
- c# – 如何将文件和文件夹的ICON插入到treeView和listView中
- A FLASH Bootloader for PIC16 and PIC18 Devices--硬译(四