XMLHttpRequest

XMLHttpRequest,第1张

1 .尽管名字里面有XML,Http,但是实际上是可以使用多种协议的file,ftp,发送任何形式的数据,包括字符串和二进制

2 .ajax只会向同源网址,发出http请求,跨域请求是会报错的

3 .

1 .返回一个整数,表示实例对象的当前状态,该属性只读。

2 .0 表示XMLHttprequest实例已经生成,但是实例的open方法没有被调用

3 .1 表示open方法已经调用,可以使用实例的setRequestHeader()方法设置HTTP请求头信息。此时send方法还没调用

4 .2 表示实例的send方法已经调用,并且服务器返回的头信息和状态码已经收到

5 .3 表示正在接收服务器传来的数据体body部分。这时,如果实例的responseType属性等于text或者空字符串,responseText属性就会包含已经收到的部分信息

6 . 4 表示服务器返回的数据已经完全接收,或本次接收已经失败

7 .通信过程中,每当实例对象发生状态变化,他的readyState属性就会改变,这个值每一次变化,都会触发readyStateChange事件

1 .指向一个监听函数,readystatechange事件发生时,就会执行这个属性

2 .在这个里面判断当前的状态,取得返回值

1 .表示服务器返回的数据体,可能是任意的数据类型,比如字符串,对象,二进制对象等,具体类型由XMLHttpRequest.responseType属性决定,该属性只读

2 .如果本次请求没有成功或者数据不完整,该属性等于null.但是,如果responseType属性等于text或空字符串,在请求没有结束之前,response属性包含服务器已经返回的部分数据

3 .

1 .表示服务器返回数据的类型

2 .这个属性是可写的,在open之后,send之前,设置这个值,告诉服务器返回指定类型的数据。如果responseType设为空字符串,就等同于默认值text

3 .“”表示服务器返回文本数据

4 .“arraybuffer”表示服务器返回二进制数组

5 ."blob":表示返回二进制对象。图片文件

6 ."document"返回一个文档对象

7 ."json"json对象,浏览器自动对返回数据调用JSON.parse()方法

8 ."text"字符串

1 .属性返回从服务器接收的字符串,该属性为只读。只有HTTP请求完成以后,该属性才会包含完整的数据

2 .

1 .返回从服务器接收到的html或xml文档对象,该属性为只读。如果本次请求没有成功,或者受到的数据不能解析为xml或html,该属性等于null

2 .该属性生效的前提是HTTP回应的Content-type头信息等于text/xml或者application/xml。在发送前XMLHttprequest.responseType属性要设为document

3 .如果HTTP回应的Content-type头信息不等于text/xml和application/xml.但是想要从responseXML拿到数据需要手动调用XMLHttpRequest.overideMineType()方法,强制进行xml解析

1 .表示发送数据的服务器的网址

2 .这个属性的值与open方法指定的请求网址不一定相同,如果服务器端发生了跳转,这个属性返回最后实际返回数据的网址。另外,如果原始的url包括锚点,该属性会把锚点剥离

1 .XMLHttpRequest.status属性返回一个整数,表示服务器端回应的HTTP状态码。一般来说,通信成功,这个状态码返回的是200;

2 .只有2XX,304的状态码,服务器返回的数据是正确的

3 .statusText属性返回一个字符串,表示服务器发送的状态提示。该属性包含整个状态信息,比如ok,not found.在请求发送之前,该属性的值是空字符串,如果服务器没有返回状态提醒,该属性的值默认为ok,该属性为只读属性

4 .

1 .返回一个整数,表示多少毫秒之后,如果请求任然没有得到结果,就自动终止。如果该属性等于0,就表示没有时间限制

2 .xhr.ontimeout 用于设置一个监听函数,如果发生timeout事件,就会执行这个监听函数

1 .xhr.onloadstart

2 .xhr.onprogress(loaded,total,lengthComputeable)

3 .xhr.onabort

4 .xhr.onerror

5 .xhr.onload

6 .xhr.ontimeout

7 .xhr.onloadend:请求完成,不论失败或成功的监听函数

1 .该属性是一个布尔值,表示跨域请求时,用户信息cookie,http头信息是否会包含在请求之中,默认为false,即跨域请求发送时,不会发送example.com设置在本机上的cookie

2 .如果需要跨域请求发送cookie,需要withCredentials属性设为true.同源请求不需要设置这个属性

3 .为了这个属性生效,服务器必须显示返回Access-control-allow-credentials:true这个头信息

4 .脚本总是遵守同源策略,无法从document.cookie或者http回应的头信息之中,读取跨域的cookie,withCredentials属性不影响这一点

5 .

1 .open()用于指定http请求的参数,或者说初始化XMLHttpRequest实例对象

2 .send()方法用于发出实际http请求。参数可选

3 .setRequestHeader()

1 .用来指定MIME类型,覆盖服务器返回的真正的MIME类型,从而让服务器进行不一样的处理

2 .假设服务器返回的数据类型是text/xml,当浏览器解析不成功报错的时候,这时拿不到数据,为了拿到原始的数据,我们可以把MIME类型改成text/plain。这样浏览器就不会自动解析了,从而可以拿到原始文本了

3 .该方法必须在send方法之前调用

4 .修改服务器返回的数据类型,并不是正常情况下应该采取的方法。如果希望服务器返回指定的数据类型,可以使用responseType属性告诉服务器。只有在服务器无法返回某种数据类型时,才使用overrideMimeType()方法

5 .

1 .返回HTTP头信息指定字符安的值,如果还没有收到服务器返回或者指定字段不存在,返回null

2 .如果有多个字段同名,他们的只会被连接成为一个字符串,每个字段之间使用逗号+空格分割

3 .

1 .返回一个字符串,表示服务器发来的所有http头信息,格式为字符串,每个头信息之间使用换行分隔

1 .用来终止已经发出的http请求,调用这个方法以后,readyState属性变为4,status属性变为0

2 .

1 .readyStateChange,-onReadyStateChange事件

2 .progress

1 .想在用户卸载网页的时候,向服务器发送一些数据,常见的是pagehide事件回调里面,使用ajax发送数据,但是这样做的后果就是可能会发送不出去,因为ajax是异步发送数据,很可能在他即将发送的时候,页面就已经卸载了,从而导致异步取消或者发送失败

2 .上面那个方法可以保证是异步发出请求,但是请求和当前页面脱钩,作为浏览器任务,因为可以保证把数据发出去,不拖延卸载流程

3 .方法使用

这里是使用的XMLHttpRequest2中的API,口蹄疫通过XMLHttpRequest对象的  abort( )方法  来取消正在进行的HTTP请求,abort( )方法是在XMLHttpRequest和XMLHttpRequest2中都可用的,调用abort( )方法在这个对象上触发abort事件。

调用abort( )的主要原因是完成像取消或超时请求消耗的是啊进太长或当响应变得无关时的情况 

例如:使用XMLHttpRequest为文本输入域请求自动完成推荐,如果用户在服务器的建议到达之前输入了新的字符,这时等待请求就不再有用了,所有应该终止

XMLHttpRequest2中定义了  timeout  属性来指定请求自动终止的毫秒数,也定义了timeout事件用于超时发生时触发,但是到目前位置,浏览器还不支持这些自动超时, 

但是我们可以使用setTimeout( )和abort( )方法来实现自己的超时

/*

发起HTTP GET请求获取指定URL的内容

如果响应成功到达,则传入responseText给回调函数

如果响应在timeout时间内没有到达,则中止请求

浏览器可能会在abort()后出啊发readystatechange

如果部分请求结果到达,甚至可能设置status属性

所有需要设置一个标记,当部分且超时的响应到达时不会调用回调函数

如果使用load(当请求完成时触发)事件就没有这个风险

/*

发起HTTP GET请求获取指定URL的内容

如果响应成功到达,则传入responseText给回调函数

如果响应在timeout时间内没有到达,则中止请求

浏览器可能会在abort()后出啊发readystatechange

如果部分请求结果到达,甚至可能设置status属性

所有需要设置一个标记,当部分且超时的响应到达时不会调用回调函数

如果使用load(当请求完成时触发)事件就没有这个风险*/

function ( url,timeout,callback ) {

var request =new XMLHttpRequest()

var time =false//是否超时

    var timer =setTimeout(function(){

    timeout =true

    request.abort()/ /请求中止

 }, timeout )

request.open("GET", url )

request.onreadystatechange =function(){

if(request.readyState !==4)continue//忽略未完成的请求

        if(timeout)return//忽略中止请求

        clearTimeout(timer)//取消等待的超时

        if(request.status ===200)

callback (request.responseText)

}

request.send(null)

}

ServerXMLHTTP 对象的分步说明

确保服务器上有 MSXML 3.0 或更高版本的解析程序,已经运行了代理配置实用程序,并且已经正确设置。有关更多信息,请参阅本文的“参考”部分。

将下列代码复制到名为ServerHTTP.asp 的新 Active Server Page (ASP) 页中。将该 ASP 页放到默认的主目录中。

<%@ Language=vbScript%>

<%

DataToSend = "id=1"

dim xmlhttp

set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")

xmlhttp.Open "POST","ocalhost/Receiver.asp",false

xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

xmlhttp.send DataToSend

Response.ContentType = "text/xml"

Response.Write xmlhttp.responsexml.xml

Set xmlhttp = nothing

%>

备注:由于线程处理问题,两个 ASP 文件应位于不同的虚拟文件夹中。

如 果池设置为“Low”(低)或“Medium”(中)(这是 Microsoft Windows 2000 的默认设置),应在另一个虚拟文件夹中 POST 到 ASP。如果 ASP 在同一个虚拟文件夹中,ASP 将停止响应(挂起)。关闭浏览器后,该 ASP 和其他 ASP 将继续挂起,因为即使关闭浏览器,请求仍然在队列中。必须重新启动 IIS 或重新启动计算机。

如果将池更改为“High”(高),可以再次对远程 ASP 运行这段代码,因为使用的是新线程。

将下列代码复制到名为Receiver.asp 的新 ASP 页中。将该 ASP 页放到默认的主目录中。

<%@language=vbscript%>

<%

value = Request.Form("id")

Response.ContentType = "text/xml"

response.write "<ReturnValue>" &value &"</ReturnValue>"

%>

发布时,请务必使用服务器名而不是 Localhost,而且被 XMLHttp 打开的 URL 也应当包含同一服务器名。

确保“POST”指向正确的位置。

单击Submit(提交) XMLHTTP 按钮。

如果只是在客户端脚本中使用XMLHTTP 对象,必须遵守同样的头信息和数据格式。

XMLHTTP 对象的分步说明

将下列代码复制到名为ClientHTTP.asp 的新 ASP 页中。将该 ASP 页放到默认的主目录中。

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>

<!--

function XMLHTTPButton_onclick() {

var DataToSend = "id=1"

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")

xmlhttp.Open("POST"," <%=Request.ServerVariables("Server_Name")%>/Receiver.asp",false)

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

xmlhttp.send(DataToSend)

alert(xmlhttp.responseXML.xml)

}

//-->

</SCRIPT>

<INPUT type="button" value="Submit XMLHTTP" id=XMLHTTPButton name=XMLHTTPButton

LANGUAGE=javascript onclick="return XMLHTTPButton_onclick()">

从前面概述的ServerXMLHTTP 步骤的第 3 步中创建页面。

确保“POST”指向正确的位置。

在浏览器中加载ClientHTTP.asp 。转载,仅供参考。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/248046.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存