XMLHttpRequest
XMLHTTPRequest对象的创建与浏览器的兼容问题

XMLHTTPRequest对象的创建与浏览器的兼容问题MLHttpRequest 对象是AJAX功能的核⼼,要开发AJAX程序必须从了解XMLHttpRequest 对象开始。
了解XMLHttpRequest 对象就先从创建XMLHttpRequest 对象开始,在不同的浏览器中创建XMLHttpRequest 对象使⽤不同的⽅法:先看看IE创建XMLHttpRequest 对象的⽅法(⽅法1):var xmlhttp=ActiveXobject("Msxml12.XMLHTTP");//较新的IE版本创建Msxml12.XMLHTTP对象var xmlhttp=ActiveXobject("Microsoft.XMLHTTP");//较⽼的IE版本创建Microsoft.XMLHTTP对象⽽ Mozilla、Opera、Safari 和⼤部分⾮IE的浏览器都使⽤下⾯这种⽅法(⽅法2)创建XMLHttpRequest 对象:var xmlhttp=new XMLHttpRequest();注意:实际上Internet Explorer 使⽤了⼀个名为 XMLHttp 的对象,⽽不是 XMLHttpRequest 对象,⽽ Mozilla、Opera、Safari 和⼤部分⾮Microsoft 浏览器都使⽤的是后者(下⽂统称 XMLHttpRequest 对象)。
IE7开始也开始使⽤XMLHttpRequest 对象了。
因此我们需要创建⼀个能兼容多浏览器的XMLHTTPRequest对象:第⼀种⽅法:var xmlhttp=false;//创建⼀个新变量并赋值false,使⽤false作为判断条件说明还没有创建XMLHTTPRequest对象function CreateXMLHttp(){try{xmlhttp=new XMLHttpRequest();//尝试创建 XMLHttpRequest 对象,除 IE 外的浏览器都⽀持这个⽅法。
XMLHttpRequest发送POST、GET请求以及接收返回值

XMLHttpRequest发送POST、GET请求以及接收返回值使⽤XMLHttpRequest对象分为4部完成:1.创建XMLHttpRequest组建2.设置回调函数3.初始化XMLHttpRequest组建4.发送请求实例代码:[javascript]var userName;var passWord;var xmlHttpRequest;//XmlHttpRequest对象function createXmlHttpRequest(){if(window.ActiveXObject){ //如果是IEreturn new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest){ //⾮IE浏览器return new XMLHttpRequest();}}function onLogin(){userName = ername.value;passWord = document.f1.password.value;var url = "LoginServlet?username="+userName+"&password="+passWord+"";//1.创建XMLHttpRequest组建xmlHttpRequest = createXmlHttpRequest();//2.设置回调函数xmlHttpRequest.onreadystatechange = zswFun;//3.初始化XMLHttpRequest组建xmlHttpRequest.open("POST",url,true);//4.发送请求xmlHttpRequest.send(null);}//回调函数function zswFun(){if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){var b = xmlHttpRequest.responseText;if(b == "true"){alert("登录成功!");}else{alert("登录失败!");}}}================================================================================[javascript]var xmlhttp;function verify1() {var username = document.getElementById("username").value;//确定浏览器if(window.XMLHttpRequest) {//针对FireFox、Mozillar、Opera、Safari、IE7、IE8//创建XMLHttpRequest对象xmlhttp = new XMLHttpRequest();//修正某些浏览器的BUGif(xmlhttp.overrideMimeType) {xmlhttp.overrideMimeType("text/");}}else if(window.ActiveXObject){//针对IE5、IE5.5、IE6//这两个为插件名称作为参数传递,为了创建ActiveXObjectvar activeName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0;i>activeName.length();i++) {try{//⾮别取出,如果创建成功则终⽌循环,如果失败则会抛出异常继续循环xmlhttp = new ActiveXObject(activeName[i]);break;}catch(e){}}}//确定XMLHttpRequest是否创建成功/*if(!xmlhttp) {alert("XMLHttpRequest创建失败!");return;}else {alert("XMLHttpRequest创建成功!"+xmlhttp);}*///注册回调函数xmlhttp.onreadystatechange=callback;url = "classisservlet?name="+username;//设置连接信息//1.是http请求的⽅式//2.是服务器的地址//3.是采⽤同步还是异步,true为异步//xmlhttp.open("GET",url,true);//post请求与get请求的区别//第⼀个参数设置成post第⼆个只写url地址,第三个不变xmlhttp.open("POST","classisservlet",true);//post请求要⾃⼰设置请求头xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送数据,开始与服务器进⾏交互//post发送请求xmlhttp.send("name="+username);}function callback() {//接收响应数据 //判断对象状态是否交互完成,如果为4则交互完成if(xmlhttp.readyState == 4) {//判断对象状态是否交互成功,如果成功则为200if(xmlhttp.status == 200) {//接收数据,得到服务器输出的纯⽂本数据var response = xmlhttp.responseText;//得到div的节点将数据显⽰在div上var divresult = document.getElementById("result");divresult.innerHTML = response;}}}[javascript]<span style="color:#ffffff;"></span>[plain]。
Ajax中的XMLHttpRequest对象详解

Ajax中的XMLHttpRequest对象详解XMLHttpRequest对象是Ajax技术的核⼼。
在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引⼊,被称之为XMLHTTP,它是⼀种⽀持异步请求的技术。
后来Mozilla、Netscape、Safari、Firefox和其他浏览器也提供了XMLHttpRequest类,虽然这些浏览器都提供了XMLHttpRequest类,但它们创建XMLHttpRequest类的⽅法并不相同。
XMLHttpRequest使我们可以使⽤JavaScript向服务器提出请求并处理响应,⽽不阻塞⽤户的其他操作。
不刷新页⾯就和服务器进⾏交互是Ajax最⼤的特点。
这个重要的特点主要归功于XMLHttpRequest对象。
使⽤XMLHttpRequest对象使得⽹页应⽤程序像windows应⽤程序⼀样,能够及时响应⽤户与服务器之间的交互,不必进⾏页⾯刷新或者跳转,并且能够进⾏⼀系列的数据处理,这些功能可以使⽤户的等待时间缩短,同时也减轻了服务器端的负载。
⽬前XMLHttpRequest对象已经得到了⼤部分浏览器的⽀持,因此使⽤Ajax技术开发Web应⽤程序的时候⼀般情况下不会出现问题。
不过,当开发⼈员确定使⽤Ajax技术来开发时,仍然需要考虑⽤户会使⽤什么样的浏览器来对⽹站进⾏访问,虽然不⽀持XMLHttpRequest对象的浏览器占少数。
在使⽤XMLHttpRequest对象向服务器发送请求和处理响应之前,必修先⽤JavaScript创建⼀个XMLHttpRequest对象,然后通过这个对象来和服务器建⽴请求并接收服务器返回的数据。
由于XMLHttpRequest不是⼀个W3C标准,所以可以采⽤多种⽅法使⽤JavaScript来创建XMLHttpRequest的实例。
Internet Explorer把XMLHttpRequest实现为⼀个ActiveX对象,其他浏览器(如Firefox、Safari和Opera等)把它实现为⼀个本地JavaScript对象。
AJAX(XMLHttpRequest)进行跨域请求方法详解

发表于:2010-1-11浏览:965作者:转载遗失来源:网络转载关键字:AJAX,详解,请求描述:注意:以下代码请在Firefox3."5、Chrome3."0、Safari4之后的版本中进行测试。
IE8的实现方法与其他浏览不同。
跨域请求,顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。
这种情况很常见注意:以下代码请在Firefox3."5、Chrome3."0、Safari 4之后的版本中进行测试。
IE8的实现方法与其他浏览不同。
跨域请求,顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。
这种情况很常见,比如说通过style标签加载外部样式表文件、通过img标签加载外部图片、通过script标签加载外部脚本文件、通过Webfont 加载字体文件等等。
默认情况下,脚本访问文档属性等数据采用的是同源策略(Same origin policy)。
那么,什么是同源策略呢?如果两个页面的协议、域名和端口是完全相同的,那么它们就是同源的。
同源策略是为了防止从一个地址加载的文档或脚本访问或者设置从另外一个地址加载的文档的属性。
如果两个页面的主域名相同,则还可以通过设置document.domain属性将它们认为是同源的。
随着Web2."0和SNS的兴起,Web应用对跨域访问的需求也越来越多,但是,在脚本中进行跨域请求是受安全性限制的,Web开发人员迫切需要提供一种更安全、方便的跨域请求方式来融合(Mashup)自己的Web应用。
这样做的一个好处就是可以将请求分摊到不同的服务器,减轻单个服务器压力以提高响应速度;另外一个好处是可以将不同的业务逻辑分布到不同的服务器上以降低负载。
值得庆幸的是,跨域请求的标准已经出台,主流浏览器也已经实现了这一标准。
W3C工作组中的WebApplicationsWorking Group(Web应用工作组)发布了一个Cross-Origin Resource Sharing(跨域资源共享,该规范地址:http:3."org/TR/access-control/和http://dev.w该规范只能应用在类似XMLHttprequest这样的API容器内。
XMLHttpRequest对象五步使用法

在Ajax应用程序中,XmlHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器返回的响应信息和数据。
XMLHttpRequest简介XMLHttpRequest可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。
XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。
XMLHttpRequest 可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个DOM 文档形式返回内容。
尽管名为 XMLHttpRequest,它并不限于和XML 文档一起使用:它可以接收任何形式的文本文档。
XMLHttpRequest 对象是名为 AJAX 的Web 应用程序架构的一项关键功能。
XMLHttpRequest和JavascriptJavascript本身并未具备向服务器发送请求的能力,要么使用window.open()方法重新打开一个页面向服务器提交请求,要么使用XMLHttpRequest对象发送请求。
不同的是,前者是普通的即同步交互模式,而后者是异步交互方式。
XMLHttpRequest提供了一系列的属性和方法,来向服务器发送异步的http请求;在服务器处理用户请求的过程中,XMLHttpRequest通过属性的状态值来实时反映http请求所处的状态,并根据这些状态指示Javascript做相应的处理;当服务器顺利完成响应用户行为的动作、并将响应数据返回时,XMLHttpRequest提供的response系列方法,可以将这些响应数据以文本、XML Document对象、Ado Stream对象或者unsignedbyte数组的方式组装起来,提供给Javascript处理。
XMLHttpRequest的五步使用法:1、建立XMLHttpRequest对象2、注册回调函数3、使用open方法社会自和服务器端交互的基本信息4、设置发送的数据,开始和服务器端交互5、在回调函数中判断交互是否结束,响应是否正确,并根据需要过去服务器端返回的数据,更新页面内容下面我们以用户名确认来实现XMLHttpRequest的五步使用法:<!DOCTYPE html><html><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript">var xmlhttp;function submit(){//1.创建XHLHttpRequest对象if(window.XMLHttpRequest){//alert("IE7,IE8 ,FireFox。
ASP XMLHttpRequest对象属性

ASP XMLHttpRequest对象属性创建好XMLHttpRequest对象之后,就可以调用该对象的方法和属性进行数据异步传输了。
首先介绍该对象的属性,如表7-1所示,下面将会详细讨论这些属性。
1.onreadystatechange属性onreadystatechange属性表示当每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数。
即当服务器返回数据到客户端时,需要相应的JavaScript 函数去处理这些数据,而这个JavaScript函数就使用该属性定义。
2.readyState属性readyState用来表示请求的状态。
有5个可取值,分别为:●0 表示未初始化,即对象已建立,但是尚未初始化(尚未调用open方法)。
● 1 表示正在加载,此时对象已建立,尚未调用send方法。
● 2 表示已加载,即send方法已调用,但是当前的状态及http头未知。
● 3 表示交互中,此时已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误。
● 4 表示完成,即数据接收完毕,此时可以通过responseBody和responseText获取完整的回应数据。
3.responseBody属性当服务器返回请求的状态为完成时,可以通过此属性来获得接收的数据,该属4.responseStream属性5.responseText属性该属性表示服务器的文本响应,其处理结果以字符串形式返回,XMLHttpRequest默认将响应数据的编码定为UTF-8。
如果服务器返回的是XML文档,此属性并不处理XML文档中的编码声明,需要使用responseXML来处理。
6.responseXML属性该属性表示服务器的响应,其结果以XML文件格式返回。
这个对象可以解析为一个DOM对象。
即将响应信息格式化为Xml Document对象并返回。
ASP XMLHttpRequest对象属性

ASP XMLHttpRequest对象属性创建好XMLHttpRequest对象之后,就可以调用该对象的方法和属性进行数据异步传输了。
首先介绍该对象的属性,如表6-23所示,下面将会详细讨论这些属性。
1onreadystatechange属性表示当每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数。
即当服务器返回数据到客户端时,需要相应的JavaScr ipt函数去处理这些数据,而这个JavaScript函数就使用该属性定义。
2.readyState属性readyState用来表示请求的状态。
有5个可取值,分别为:●0 表示未初始化,即对象已建立,但是尚未初始化(尚未调用open方法)。
● 1 表示正在加载,此时对象已建立,尚未调用send方法。
● 2 表示已加载,即send方法已调用,但是当前的状态及http头未知。
● 3 表示交互中,此时已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误。
● 4 表示完成,即数据接收完毕,此时可以通过responseBody和responseText获取完整的回应数据。
3.responseBody属性当服务器返回请求的状态为完成时,可以通过此属性来获得接收的数据,该属性得到的是二进制的byte流。
语法如下所示:4.responseStream属性以ADO Stream对象的形式返回响应信息,语法如下所示:5.responseText属性该属性表示服务器的文本响应,其处理结果以字符串形式返回,XMLHttpRequ est默认将响应数据的编码定为UTF-8。
如果服务器返回的是XML文档,此属性并不处理XML文档中的编码声明,需要使用responseXML来处理。
6.responseXML属性该属性表示服务器的响应,其结果以XML文件格式返回。
这个对象可以解析为一个DOM对象。
xmlHttpRequest对象的属性和方法

// 语法:oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue);
// 参数:bstrHeader(字符串,头名称。)
// bstrValue(字符串,值。)
这里说些题外话,其实这个东西很早就出现了,只是以前浏览器的支持不够,只有IE中才支持,所以大多数的WEB程序员都没有怎么用他,但是现在情况发生了很大地改变,Mozilla和Safari把它采用为事实上的标准,主流的浏览器都开始支持XMLHTTPRequest对象了。但是这里需要重点说明的是XMLHTTPRequest目前还不是一个W3C的标准,所以在不同的浏览器上表现也稍有些区别。
// 发送请求到http服务器并接收回应
// 语法:oXMLHttpRequest.send(varBody);
// 参数:varBody (欲通过此请求发送的数据。)
// 备注:此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。
最通用的定义为:XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。(这个功能正是AJAX的一大特点之一:))
来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft? XML Document Object Model (DOM)处理回应。
前端http请求和常见的几个请求技术做具体的讲解

前端http请求和常见的⼏个请求技术做具体的讲解对于前端来说,请求是前端⽇常⼯作必备的,通过请求才能与后端进⾏数据交互,尤其在现在前后端分离的开发模式下,请求显得就更加重要。
因此,对于前端开发者来说,掌握请求就很重要。
下⾯将从http请求和常见的⼏个请求技术做具体的讲解⼀、XMLHttpRequestXMLHttpRequest⼀开始只是微软浏览器提供的⼀个接⼝,后来各⼤浏览器纷纷效仿也提供了这个接⼝,再后来W3C对它进⾏了标准化,按照标准前后可以分为两个版本,具体阐述如下:版本以(⽼版本)://新建⼀个XMLHttpRequest对象var xhr=new XMLHttpRequest();//进⾏请求xhr.open('GET', 'url');xhr.send();//等待服务器响应xhr.onreadystatechange = function(){//该函数会被调⽤四次,因此需要判断状态是否为4if ( xhr.readyState == 4 && xhr.status == 200 ) {alert( xhr.responseText );} else {alert( xhr.statusText );}};在⽼版本中的,对应的具体属性说明如下:1. xhr.readyState:XMLHttpRequest对象的状态,等于4表⽰数据已经接收完毕。
2. xhr.status:服务器返回的状态码,等于200表⽰⼀切正常。
3. xhr.responseText:服务器返回的⽂本数据4. xhr.responseXML:服务器返回的XML格式的数据5. xhr.statusText:服务器返回的状态⽂本。
⽼版本因为不是统⼀的标准,各个浏览器⼚商在实现的时候都有⼀定的差异,⽽且在存在⼀些缺陷:1. 只⽀持⽂本数据的传送,⽆法⽤来读取和上传⼆进制⽂件。
ASP XMLHttpRequest发送请求

ASP XMLHttpRequest发送请求在使用XMLHttpRequest对象发送请求和处理响应之前,必须先用JavaScript 创建一个XMLHttpRequest对象。
由于XMLHttpRequest不是一个W3C标准,所以可以采用多种方法创建XMLHttpRequest的实例。
Internet Explorer把XMLHttpReq uest实现为一个ActiveX对象,其他浏览器(如Firefox、Safari和Opera)把它实现为一个本地JavaScript对象。
由于存在这些差别,JavaScript代码中必须包含有关的处理,从而使用ActiveX技术或者或者或者使用本地JavaScript对象技术来创建X MLHttpRequest的一个实例。
但是,并不需要针对每个浏览器详细编写代码来区别浏览器类型。
要创建一个XMLHttpRequest对象的实例,需要做的只是检查浏览器是否提供对ActiveX对象的支持。
如果浏览器支持ActiveX对象,就可以使用ActiveX来创建XMLHttpReques t对象。
否则,就要使用本地JavaScript对象技术来创建。
下面代码中的createXML HttpRequest()函数演示了使用JavaScript代码来编写跨浏览器的XMLHttpRequest对利用createXMLHttpRequest()函数创建的XmlHttp对象实例,可以向服务器发送,请求可以是GET或者或者或者POST格式。
要实现这一操作,就需要使用XM LHttpRequest对象的open()方法和send()方法,这两个方法在6.6.3节已经介绍过,现在要求将XML文件中的内容发送到服务器,即将一个XML文件作为请求来发送,重点是使读者掌握并理解GET和POST方法的区别及应用场景。
实现的方法例如,在一个HTML页面的表单中有一个文本输入框和按钮。
要求在单击按钮传统的做法是为form添加action属性来指定提交的服务器端页面。
XMLHttpRequest对象的属性与方法

XMLHttpRequest对象的属性与⽅法XMLHttpRequest对象是Ajax的核⼼,它有很多属性和⽅法。
1,readyState属性当⼀个XMLHttpRequest对象被创⽴后,readyState属性标⽰了当前对象处于什么状态,可以通过对该属性的访问,来判读此次请求的状态然后做出相应的操作,case 0 :未初始化状态,此时,已经创建了⼀个XMLHttpRequest对象,但是还没有初始化。
Case 1:准备发送状态:此时,已经调⽤了XMLHttpRequest对象的open()⽅法,并且XMLHttpRequest对象已经准备好将⼀个请求发送到服务器。
case 2:已发送状态,此时已经通过send⽅法把⼀个请求发送到服务器,等待响应。
case 3:正在接收状态,此时已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收到。
case 4:完成响应状态,此时已经完成了HttpResponse响应的接收2.responseText属性responseText属性包含客服端接收到的HTTP响应的⽂本内容,当readyState属性为0、1或2时,responseText属性包含⼀个空字符串:当readyState属性值为3时,响应中包含客服端还没完成的响应信息;当readyState属性值卫4,responseText属性才包含完整的响应信息。
3.responseXML属性只有当readyState属性为4,并且响应头部的Content-Type的MIME类型被指定为XML(text/xml或者application/xml)时,该属性才会有值并且被解析成⼀个XML⽂档,否则该属性为null。
如果是回传的XML⽂档结构不良或者未完成响应回传,该属性也会为null。
responseXML属性⽤来描述被XMLHttpRequest解析后的XML⽂档的属性。
4.status属性status属性描述了HTTP状态代码,注意,仅当readyState属性值为3(正在接受中)或者4(已加载)时,才能对此属性进⾏访问。
深入讲解xhr(XMLHttpRequest)jsonp请求之abort

深⼊讲解xhr(XMLHttpRequest)jsonp请求之abort前⾔相信⼤家在⼯作中经常需要使⽤AJAX,所以当⼤家看到⽂章标题的时候可能会觉得这是⼀个⽼⽣常谈的话题。
前端开发中向后端发起xhr(XMLHttpRequest)请求(代表性的就是熟悉的ajax)是再正常不过的事。
但在前端开发过程中,不怎么重视xhr的abort(中⽌掉xhr请求,及表⽰取消本次请求)。
往往会带来⼀些不可意料的结果。
⽐如:切换tab,发起xhr请求,渲染同⼀个列表。
就这么简单的拉取数据渲染列表的功能,并且可以根据tab切换。
想想应该是很简单。
但是假如你只顾着发起xhr请求,⽽没有abort掉它,想想会发⽣什么。
很有可能就是当前选中的tab数据,并不是你想要的。
说⽩了就是数据错了。
这时候你可能就要考虑是不是xhr请求返回数据的顺序问题。
答案是肯定的,xhr请求返回数据顺序是不固定的。
所以你要做的就是abort掉你之前的xhr请求,然后再发起⼀个新的xhr请求。
结合上⾯所说的例⼦可以知道xhr使⽤不当会存在以下问题:容易出现页⾯最终数据与状态不⼀致的问题,这可能再列表筛选是出现的概率⽐较⼤。
xhr请求达到⼀定数量之后,浏览器就会显得⾮常的慢。
因为有太多的请求在请求服务器资源。
为了解决上⾯的问题,我们在进⾏页⾯的时候就必须考虑abort掉所有的xhr请求。
那么如何实现xhr的abort⽅法呢,或者通过何种⽅式abort掉xhr呢?⼀个简单的xhr我们都知道,现在的框架(例如:jQuery的ajax模块)对xhr都进⾏了封装,是为了让我们更好的使⽤xhr。
但是也蒙蔽了我们的眼睛。
让我们抛开框架,来看看⼀个简单的xhr怎么实现。
//仅供参考 xhrfunction ajax(type ,url , data , successCallBack , errorCallBack){let xhr = new XMLHttpRequest();xhr.onload = ()=>{if(xhr.status === 200){return successCallBack(xhr.response||xhr.responseText);}return errorCallBack('请求失败');}xhr.onerror = ()=>{return errorCallBack('出错了');}xhr.open(type,url);xhr.send(data ? data:null);}这就是⼀个简单的xhr请求的实现,我把它命名为ajax,我们现在可以通过以下⽅式进⾏调⽤:ajax('get','/test/getUserList' , undefined , function(result){console.log('成功了。
XmlHttpRequest使用及“跨域”问题解决

XmlHttpRequest使⽤及“跨域”问题解决⼀. IE7以后对xmlHttpRequest 对象的创建在不同浏览器上是兼容的。
下⾯的⽅法是考虑兼容性的,实际项⽬中⼀般使⽤Jquery的ajax请求,可以不考虑兼容性问题。
function getHttpObject() {var xhr=false;if (windows.XMLHttpRequest)xhr=new XMLHttpRequest();else if (window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHttp");}return xhr;}⼆. XMLHttpRequest的属性及⽅法1、⽅法描述abort() 停⽌当前请求getAllResponseHeaders() 把HTTP请求的所有响应⾸部作为键/值对返回getResponseHeader(“header”) 返回指定键的⾸部串值open(“method”,”url”) 建⽴对服务器的调⽤,Method可以是GET,POST或PUT,URL可以是相对或绝对URL send(content)向服务器发送请求setRequestHeader(“header”,”value”) 把指定⾸部设置为所提供的值。
在设置任何⾸部之前必须调⽤open()2、属性描述onreadystatechange 每个状态改变都会触发,通常会调⽤⼀个javascript函数readyState 请求的状态,5个值; 0:为初始化,1:正在加载;2:已经加载,3:交互中,4:完成responseText 服务器的响应,表⽰为字符串responseXML 服务器的响应,表⽰为XML,可以解析为DOM对象status 服务器的HTTP状态码(200:ok,304:not modified,404:Not Found 等)statusText Http状态码的相应⽂本(ok或Not Found)3、⼿写⼀个Ajax请求的例⼦:eg1: get$(function(){$("#id").onclick(tunction(){var request=new XMLHttpRequest();var url="";var method="GET";request.open(method,url);request.send(null);request.onreadystatechange=function(){if (request.readyState==4&&(request.status==200 || request.status==304))alert (request.reponseText);//如果返回的是html 标签,则可以使⽤ //$(“#id2”).innerHtml=request.reponseText;//如果返回的xml格式,则需要将结果通过getElementByTagName(“”)[index]解析 //alert(request.reponseXML.getElementByTagName(“”)[index]) /*var type=request.getResponseHeader("Content-Type");if(type.indexOf("xml") !== -1 && request.responseXML){callback(request.responseXML); //Document对象响应}else if(type=== 'application/json'){callback(JSON.parse(request.responseText)) //JSON响应}else {callback(request.responseText);}*/} }) })eg2: post<script type="text/javascript">var xhr = new XMLHttpRequest();xhr.timeout = 3000;xhr.ontimeout = function (event) {alert("请求超时!");}var formData = new FormData();formData.append('tel', '182********');formData.append('psw', '111111');xhr.open('POST', ':8000/login');xhr.send(formData);xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200) {alert(xhr.responseText);}else {alert(xhr.statusText);}}</script>eg3:同步响应//同步响应//发起同步的HTTP GET请求以获得指定URL的内容//返回响应⽂本,或如果请求不成功或响应不是⽂本就报错。
详解XMLHttpRequest(一)同步请求和异步请求

详解XMLHttpRequest(⼀)同步请求和异步请求XMLHttpRequest 让发送⼀个HTTP请求变得⾮常容易。
你只需要简单的创建⼀个请求对象实例,打开⼀个URL,然后发送这个请求。
当传输完毕后,结果的HTTP状态以及返回的响应内容也可以从请求对象中获取。
通过XMLHttpRequest⽣成的请求可以有两种⽅式来获取数据,异步模式或同步模式。
请求的类型是由这个XMLHttpRequest 对象的open()⽅法的第三个参数async的值决定的。
如果该参数的值为false,则该XMLHttpRequest请求以同步模式进⾏,否则该过程将以异步模式完成。
两种通信模式:同步和异步请求:同步请求主线程中的同步请求会阻塞页⾯,由于对⽤户体验的糟糕效果,部分最新浏览器在主线程上的同步请求已经被弃⽤。
在极少数情况下,使⽤同步模式的XMLHttpRequests会⽐使⽤异步模式更适合。
1.在Worker中使⽤XMLHttpRequest时,同步请求⽐异步请求更适合。
主页中代码:<script type="text/javascript">var oMyWorker = new Worker("myTask.js");oMyWorker.onmessage = function(oEvent) {alert("Worker said: " + oEvent.data);};oMyWorker.postMessage("Hello");</script>myFile.txt ( XMLHttpRequest对象同步请求的⽂件):Hello World!!包含了Worker代码:myTask.jsself.onmessage = function (oEvent) {if (oEvent.data === "Hello") {var oReq = new XMLHttpRequest();oReq.open("GET", "myFile.txt", false); // 同步请求oReq.send(null);self.postMessage(oReq.responseText);}};注意: 由于使⽤了Worker,所以该请求实际上也是异步的.可以使⽤类似的⽅法,让脚本在后台与服务器交互,预加载某些内容.查看使⽤web workers了解更多详情2.不得不使⽤同步请求的情况在少数情况下,只能使⽤同步模式的XMLHttpRequest请求.⽐如在 window.onunload和window.onbeforeunload 事件处理函数中。
同源策略:为什么XMLHttpRequest不能跨域请求资源?

同源策略:为什么XMLHttpRequest不能跨域请求资源?浏览器安全:Web页⾯安全浏览器⽹络安全浏览器系统安全在没有安全保障的Web世界中,我们是没有隐私的。
因此需要安全策略来保障我们的隐私和数据的安全。
最基础、最核⼼的安全策略:同源策略什么是同源策略?其主要表现在哪些⽅⾯?如果两个 URL 的协议、域名和端⼝都相同,我们就称这两个 URL 同源。
主要表现在:DOM:同源策略限制了来⾃不同源的JavaScript脚本对当前DOM对象读和写的操作。
Web数据:同源策略限制了不同源的站点读取当前站点的Cookie、IndexDB、LocalStorage等数据。
⽹络:同源策略限制了通过XMLHttpRequest等⽅式将站点的数据发送给不同源的站点。
安全和便利性的权衡同源策略会隔离不同源的DOM、页⾯数据和⽹络通信,实现Web页⾯的完全安全。
但要绝对的安全就要牺牲掉便利性,这也会使得 Web 项⽬难以开发和使⽤,为了找到中间的平衡点,就得出让⼀些安全性来满⾜灵活性,也就是⽬前的页⾯安全策略原型。
页⾯可以引⼊第三⽅资源,不过这也暴露了很多诸如 XSS 的安全问题(⽐如通过各种途径往 HTML ⽂件中插⼊恶意脚本;将Cookie、IndexDB、LoacalStorage 等敏感数据通过 XSS 的⼿段发送给服务器),因此⼜在这种开放的基础之上引⼊了 CSP(内容安全策略)来限制其⾃由程度。
使⽤ XMLHttpRequest 和 Fetch 都是⽆法直接进⾏跨域请求的,因此浏览器⼜在这种严格策略的基础之上引⼊了跨域资源共享策略(CORS),让其可以安全地进⾏跨域操作。
两个不同源的 DOM 是不能相互操纵的,因此,浏览器中⼜实现了跨⽂档消息机制(window.postMessage 的 JavaScript 接⼝),让其可以⽐较安全地通信。
内容安全策略(CSP)的核⼼是什么?CSP 的核⼼思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执⾏内联 JavaScript 代码总结:如果页⾯中没有安全策略进⾏保障,那么Web世界中将⽆任何隐私和数据安全可⾔,因此有了同源策略。
XMLHttpRequest处理xml格式的返回数据(示例代码)

XMLHttpRequest处理xml格式的返回数据(⽰例代码)⽰例代码:复制代码代码如下://回调函数function callback() {//alert(xmlhttp.readyState);//5。
接收响应数据//判断对象的状态是交互完成if (xmlhttp.readyState == 4) {//判断http的交互是否成功if (xmlhttp.status == 200) {//使⽤responseXML的⽅式来接收XML数据对象的DOM对象var domObj = xmlhttp.responseXML;if (domObj) {//<message>123123123</message>//dom中利⽤getElementsByTagName可以根据标签名来获取元素节点,返回的是⼀个数组var messageNodes = domObj.getElementsByTagName("message");if (messageNodes.length > 0) {//获取message节点中的⽂本内容//message标签中的⽂本在dom中是message标签所对应的元素节点的字节点,firstChild可以获取到当前节点的第⼀个⼦节点//通过以下⽅式就可以获取到⽂本内容所对应的节点var textNode = messageNodes[0].firstChild;//对于⽂本节点来说,可以通过nodeValue的⽅式返回⽂本节点的⽂本内容var responseMessage = textNode.nodeValue;//将数据显⽰在页⾯上//通过dom的⽅式找到div标签所对应的元素节点var divNode = document.getElementById("result");//设置元素节点中的html内容divNode.innerHTML = responseMessage;} else {alert("XML数据格式错误,原始⽂本内容为:" + xmlhttp.responseText);}} else {alert("XML数据格式错误,原始⽂本内容为:" + xmlhttp.responseText);}} else {alert("出错了");}}}。
XMLHttpRequest2

1、XMLHttpRequest2XMLHttpRequest是浏览器的一个接口3,它使得JavaScript可以进行HTTP(s)通信。
发展到今天XMLHttpRequest已经升级到2级了,即XMLHttpRequest2。
很多人认为XMLHttpRequest2是属于HTML5的,而严格的来说它并不属于HTML5,它是浏览器供应商对于核心平台不断做出改进的一部分。
老版本XMLHttpRequest的不足与XMLHttpRequest2的新功能:1)、老版本XMLHttpRequest的不足a)、只支持文本数据的传送,无法用来读取和上传二进制文件b)、传送和接受数据时,没有进度信息,只能提示请求是否完成c)、受到”同域”(same origin policy)限制,即不能跨域名请求数据2)、XMLHttpRequest2的新功能a)、可以设置HTTP请求的时限,即可以设置请求超时时间b)、可以使用FormData对象管理表单数据c)、可以发送和接收二进制数据(简单说可以上传和下载文件)d)、可以发送跨域请求(在服务器端允许的情况下)e)、发送和接收数据时可以获取进度信息1.1、FormData对象ajax操作往往用来传递表单数据,为了方便表单处理HTML5新增了一个FormData对象,它可以用来模拟表单。
它与jQuery的表单序列化方法有点相似,但FormData对象最大的优点就是我们可以使用它来上传二进制文件。
1.1.1、使用FormData对象提交表单<form action="" id="j_test_form"><div><input type="text" name="username" id="j_username"></div><div><input type="password" name="password" id="j_password"></div> <div><button type="button" id="j_confirm_btn">提交</button></div></form><script>var xhr = new XMLHttpRequest(),confirmBtn = document.querySelector("#j_confirm_btn");confirmBtn.addEventListener("click", function (){var form = document.querySelector("#j_test_form");var formData = new FormData(form);xhr.open("post","formData.php",false);xhr.onload = function (e){if(xhr.readyState == 200){console.log("请求成功");}}//添加一个表单项,添加的表单项与form表单中的字段是一样的formData.append('email','sfsdf@');try{/*若在断网的情况下调用send()方法,则会抛错,一旦程序抛错,那么后面的代码就无法继续执行,所以调用send()方法时,应用try-catch捕捉错误*/xhr.send(formData);}catch(e){}}, false)</script>使用FormData提交的数据的格式:FormData提交的每个数据分四部分:第一部分就是第一行,表示”分界线(boundary)”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XMLHttpRequest是XMLHttp组件的对象,通过这个对象,Ajax可以像桌面应用程序一样只与服务器进行数据层的交换,而不必每次都刷新界面,也不必每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又回忆了响应速度,缩短了用户的等待时间。
XMLHttpRequest对象与Ajax在Ajax应用程序中,XMLHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据。
需要注意的是JavaScript本身并不具有向服务器发送请求的能力,要么使用window.open()方法重新打开一个页面,要么使用XMLHttpRequest对象发送请求,不同的是,前者是普通的即同步交互模式,而后者是异步交互模式。
XMLHttpRequest对象提供了一系列属性和方法,来向服务器端发起异步HTTP请求,监听服务器状态,并在服务器完成数据响应处理之后接收服务器端返回的信息数据。
下面是对其的说明:XMLHttpRequest 对象属性onreadystatechange:指定当readyState属性改变时的事件处理句柄,属性只写。
XMLHttpRequest 对象属性onreadystatechange是readyState状态改变的事件触发器,用来指定当readyState属性发生改变时的处理事件。
在使用过程中,通常通过将事件处理函数名称赋予onreadystatechange的方式,来为XMLHttpRequest指定事件触发器,而在事件处理函数中判断readyState状态值并做相应的处理。
如上:http_request.onreadystatechange = processRequest;processRequest作为事件处理函数,并在processRequest函数体内在readyState状态为 4 时开始执行。
readyState:返回当前请求的状态,属性只读。
这些状态用长度为4的整形数据表示,其属性的状态含义如下:0:未初始化(对象已经建立,但是未初始化,即尚未调用open方法创建http请求)1:初始化(对象已经建立,但是未调用send方法发送http请求)2:发送数据(send方法已经被调用,但是当前的状态以及http头未知)3:数据传送中(已经接收部分数据,因为响应及http头不全,这时通过response系统方法获取部分数据会出现错误)4:传送完成(数据完毕,此时可以通过response系统方法获取完整的回应数据)responseBody:将回应信息正文以unsigned byte 数组形式返回,属性只读。
responseText:以字符串的形式返回服务器响应信息,属性只读。
responseXML:将响应信息格式化为XML Document对象返回,属性只读。
XMLHttpRequest对象的方法以及含义如下:abort:取消当前请求;语法:http_request.abort();调用此方法,当前请求返回uninitialized状态。
getAllResourceHeaders:获取相应的全部http头信息;像JSP中的HttpServletRequest 对象一样,获取http请求的请求头信息,语法:headers = http_request.getAllResourceHeaders();getResourceHeader:从响应信息中获取指定的http头信息。
语法:head = http_request.getResourceHeader("header-name");open:创建一个新的http请求,并指定此请求的方法,URL,以及验证信息(用户名/密码)。
语法:http_request.open(method,url,async,user,password);async为布尔值,指定请求是否异步方式,默认为true;如果为真,当state状态改变时会调用onreadystatechange属性指向的回调函数。
如果服务器需要验证,则应该指定用户名和密码。
send:发送请求到http服务器并接收回应。
创建http请求后,就可以向服务器发送http请求,send方法被调用语法:http_request.send(varBody);参数varBody为要发送给服务器的内容。
如果没有内容要发送,varBody参数可以省略,但最好写为null,因为如果省略不写在Firfox中会报错,所以就为http_request.send(null);。
此方法的同步或异步方式取决于open方法中的async参数。
setRequestHeader:单独设定请求的某个头。
status:返回当前HTTP请求的状态码,属性只读。
如:404=“文件未找到”,200=“成功”statusText:返回当前HTTP请求的状态行,属性只读<script language="javascript" type="text/javascript"><!--var xmlhttp; // 创建XMLHTTPRequest对象function createXMLHTTPRequest(){if(window.ActiveXObject){ // 判断是否支持ActiveX控件xmlhttp = new ActiveObject("Microsoft.XMLHTTP"); // 通过实例化ActiveXObject的一个新实例来创建XMLHTTPRequest对象}else if(window.XMLHTTPRequest){ // 判断是否把XMLHTTPRequest实现为一个本地javascript对象xmlhttp = new XMLHTTPRequest(); // 创建XMLHTTPRequest的一个实例(本地javascript 对象)}}//--></script>这样就是一个简单的跨浏览器的创建方法。
XMLHttpRequest简介/zhaojiazhi/archive/2007/03/25/1540404.aspx要真正实现这种绚丽的奇迹,必须非常熟悉一个 JavaScript 对象,即 XMLHttpRequest。
这个小小的对象实际上已经在几种浏览器中存在一段时间了,它是本专栏今后几个月中要介绍的 Web 2.0、Ajax 和大部分其他内容的核心。
为了让您快速地大体了解它,下面给出将要用于该对象的很少的几个方法和属性。
∙open():建立到服务器的新请求。
∙send():向服务器发送请求。
∙abort():退出当前请求。
∙readyState:提供当前 HTML 的就绪状态。
∙responseText:服务器返回的请求响应文本。
如果不了解这些(或者其中的任何一个),您也不用担心,后面几篇文章中我们将介绍每个方法和属性。
现在应该了解的是,明确用 XMLHttpRequest 做什么。
要注意这些方法和属性都与发送请求及处理响应有关。
事实上,如果看到 XMLHttpRequest 的所有方法和属性,就会发现它们都与非常简单的请求/响应模型有关。
显然,我们不会遇到特别新的 GUI 对象或者创建用户交互的某种超极神秘的方法,我们将使用非常简单的请求和非常简单的响应。
听起来似乎没有多少吸引力,但是用好该对象可以彻底改变您的应用程序。
简单的 new首先需要创建一个新变量并赋给它一个 XMLHttpRequest 对象实例。
这在 JavaScript 中很简单,只要对该对象名使用 new 关键字即可,如清单 1所示。
不难吧?记住,JavaScript 不要求指定变量类型,因此不需要像清单 2那样做(在 Java 语言中可能需要这样)。
因此在 JavaScript 中用 var 创建一个变量,给它一个名字(如“request”),然后赋给它一个新的 XMLHttpRequest 实例。
此后就可以在函数中使用该对象了。
错误处理在实际上各种事情都可能出错,而上面的代码没有提供任何错误处理。
较好的办法是创建该对象,并在出现问题时优雅地退出。
比如,任何较早的浏览器(不论您是否相信,仍然有人在使用老版本的 Netscape Navigator)都不支持 XMLHttpRequest,您需要让这些用户知道有些地方出了问题。
清单 3说明如何创建该对象,以便在出现问题的时候发出 JavaScript 警告。
清单 3. 创建具有错误处理能力的 XMLHttpRequest一定要理解这些步骤:1.创建一个新变量 request 并赋值 false。
后面将使用 false 作为判定条件,它表示还没有创建 XMLHttpRequest 对象。
2.增加 try/catch 块:1.尝试创建 XMLHttpRequest 对象。
2.如果失败(catch (failed))则保证 request 的值仍然为 false。
3.检查 request 是否仍为 false(如果一切正常就不会是 false)。
4.如果出现问题(request 是 false)则使用 JavaScript 警告通知用户出现了问题。
用 XMLHttpRequest 发送请求得到请求对象之后就可以进入请求/响应循环了。
记住,XMLHttpRequest 惟一的目的是让您发送请求和接收响应。
其他一切都是 JavaScript、CSS 或页面中其他代码的工作:改变用户界面、切换图像、解释服务器返回的数据。
准备好 XMLHttpRequest 之后,就可以向服务器发送请求了。
设置服务器 URL首先要确定连接的服务器的 URL。
这并不是 Ajax 的特殊要求,但仍然是建立连接所必需的,显然现在您应该知道如何构造 URL 了。
多数应用程序中都会结合一些静态数据和用户处理的表单中的数据来构造该 URL。
比如,清单 7中的 JavaScript 代码获取电话号码字段的值并用其构造 URL。
这里没有难懂的地方。
首先,代码创建了一个新变量 phone,并把 ID 为“phone” 的表单字段的值赋给它。
清单 8展示了这个表单的 XHTML,其中可以看到 phone 字段及其 id 属性。
还要注意,当用户输入电话号码或者改变电话号码时,将触发清单 8所示的getCustomerInfo() 方法。
该方法取得电话号码并构造存储在 url 变量中的 URL 字符串。
记住,由于 Ajax 代码是沙箱型的,因而只能连接到同一个域,实际上 URL 中不需要域名。
该例中的脚本名为 /cgi-local/lookupCustomer.php。