`
zhengpingling
  • 浏览: 13084 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

window.XMLhttprequest前端

阅读更多
XMLHttpRequest对象是当今所有AJAX和Web 2.0应用程序的技术基础。尽管软件经销商和开源社团现在都在提供各种AJAX框架以进一步简化XMLHttpRequest对象的使用;但是,我们仍然很有必要理解这个对象的详细工作机制。



  一、 引言

  AJAX利用一个构建到所有现代浏览器内部的对象-XMLHttpRequest-来实现发送和接收HTTP请求与响应信息。一个经由XMLHttpRequest对象发送的HTTP请求并不要求页面中拥有或回寄一个<form>元素。AJAX中的"A"代表了"异步",这意味着XMLHttpRequest对象的send()方法可以立即返回,从而让Web页面上的其它HTML/JavaScript继续其浏览器端处理而由服务器处理HTTP请求并发送响应。尽管缺省情况下请求是异步进行的,但是,你可以选择发送同步请求,这将会暂停其它Web页面的处理,直到该页面接收到服务器的响应为止。

  微软在其Internet Explorer(IE) 5中作为一个ActiveX对象形式引入了XMLHttpRequest对象。其他的认识到这一对象重要性的浏览器制造商也都纷纷在他们的浏览器内实现了XMLHttpRequest对象,但是作为一个本地JavaScript对象而不是作为一个ActiveX对象实现。而如今,在认识到实现这一类型的价值及安全性特征之后,微软已经在其IE 7中把XMLHttpRequest实现为一个窗口对象属性。幸运的是,尽管其实现(因而也影响到调用方式)细节不同,但是,所有的浏览器实现都具有类似的功能,并且实质上是相同方法。目前,W3C组织正在努力进行XMLHttpRequest对象的标准化,并且已经发行了有关该W3C规范的一个草案。





 二、 XMLHttpRequest对象的属性和事件

XMLHttpRequest对象暴露各种属性、方法和事件以便于脚本处理和控制HTTP请求与响应.



readyState属性

  当XMLHttpRequest对象把一个HTTP请求发送到服务器时将经历若干种状态:一直等待直到请求被处理;然后,它才接收一个响应。这样以来,脚本才正确响应各种状态-XMLHttpRequest对象暴露一个描述对象的当前状态的readyState属性,如表格1所示。

  表格1.XMLHttpRequest对象的ReadyState属性值列表。

ReadyState取值 描述
0 描述一种"未初始化"状态;此时,已经创建一个XMLHttpRequest对象,但是还没有初始化。
1 描述一种"发送"状态;此时,代码已经调用了XMLHttpRequest open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。
2 描述一种"发送"状态;此时,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应。
3 描述一种"正在接收"状态;此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。
4 描述一种"已加载"状态;此时,响应已经被完全接收。



  onreadystatechange事件

       无论readyState值何时发生改变,XMLHttpRequest对象都会激发一个readystatechange事件。其中,onreadystatechange属性接收一个EventListener值-向该方法指示无论readyState值何时发生改变,该对象都将激活。

 

  responseText属性

         这个responseText属性包含客户端接收到的HTTP响应的文本内容。当readyState值为0、1或2时,responseText包含一个空字符串。当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。当readyState为4(已加载)时,该responseText包含完整的响应信息。



  responseXML属性

         此responseXML属性用于当接收到完整的HTTP响应时(readyState为4)描述XML响应;此时,Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。无论何时,只要readyState值不为4,那么该responseXML的值也为null。

  其实,这个responseXML属性值是一个文档接口类型的对象,用来描述被分析的文档。如果文档不能被分析(例如,如果文档不是良构的或不支持文档相应的字符编码),那么responseXML的值将为null。



  status属性

          这个status属性描述了HTTP状态代码,而且其类型为short。而且,仅当readyState值为3(正在接收中)或4(已加载)时,这个status属性才可用。当readyState的值小于3时试图存取status的值将引发一个异常。



  statusText属性

  这个statusText属性描述了HTTP状态代码文本;并且仅当readyState值为3或4才可用。当readyState为其它值时试图存取statusText属性将引发一个异常。





三、 XMLHttpRequest对象的方法

  XMLHttpRequest对象提供了各种方法用于初始化和处理HTTP请求,下列将逐个展开详细讨论。



  abort()方法

  你可以使用这个abort()方法来暂停与一个XMLHttpRequest对象相联系的HTTP请求,从而把该对象复位到未初始化状态。



  open()方法

  你需要调用open(DOMString method,DOMString uri,boolean async,DOMString username,DOMString password)方法初始化一个XMLHttpRequest对象。其中,method参数是必须提供的-用于指定你想用来发送请求的HTTP方法(GET,POST,PUT,DELETE或HEAD)。为了把数据发送到服务器,应该使用POST方法;为了从服务器端检索数据,应该使用GET方法。另外,uri参数用于指定XMLHttpRequest对象把请求发送到的服务器相应的URI。借助于window.document.baseURI属性,该uri被解析为一个绝对的URI-换句话说,你可以使用相对的URI-它将使用与浏览器解析相对的URI一样的方式被解析。async参数指定是否请求是异步的-缺省值为true。为了发送一个同步请求,需要把这个参数设置为false。对于要求认证的服务器,你可以提供可选的用户名和口令参数。在调用open()方法后,XMLHttpRequest对象把它的readyState属性设置为1(打开)并且把responseText、responseXML、status和statusText属性复位到它们的初始值。另外,它还复位请求头部。注意,如果你调用open()方法并且此时readyState为4,则XMLHttpRequest对象将复位这些值。



  send()方法

  在通过调用open()方法准备好一个请求之后,你需要把该请求发送到服务器。仅当readyState值为1时,你才可以调用send()方法;否则的话,XMLHttpRequest对象将引发一个异常。该请求被使用提供给open()方法的参数发送到服务器。当async参数为true时,send()方法立即返回,从而允许其它客户端脚本处理继续。在调用send()方法后,XMLHttpRequest对象把readyState的值设置为2(发送)。当服务器响应时,在接收消息体之前,如果存在任何消息体的话,XMLHttpRequest对象将把readyState设置为3(正在接收中)。当请求完成加载时,它把readyState设置为4(已加载)。对于一个HEAD类型的请求,它将在把readyState值设置为3后再立即把它设置为4。

  send()方法使用一个可选的参数-该参数可以包含可变类型的数据。典型地,你使用它并通过POST方法把数据发送到服务器。另外,你可以显式地使用null参数调用send()方法,这与不用参数调用它一样。对于大多数其它的数据类型,在调用send()方法之前,应该使用setRequestHeader()方法(见后面的解释)先设置Content-Type头部。如果在send(data)方法中的data参数的类型为DOMString,那么,数据将被编码为UTF-8。如果数据是Document类型,那么将使用由data.xmlEncoding指定的编码串行化该数据。



  setRequestHeader()方法

  该setRequestHeader(DOMString header,DOMString value)方法用来设置请求的头部信息。当readyState值为1时,你可以在调用open()方法后调用这个方法;否则,你将得到一个异常。



  getResponseHeader()方法

  getResponseHeader(DOMString header,value)方法用于检索响应的头部值。仅当readyState值是3或4(换句话说,在响应头部可用以后)时,才可以调用这个方法;否则,该方法返回一个空字符串。



  getAllResponseHeaders()方法

  该getAllResponseHeaders()方法以一个字符串形式返回所有的响应头部(每一个头部占单独的一行)。如果readyState的值不是3或4,则该方法返回null。





        在使用XMLHTTPRequest对象发送请求和处理响应之前,我们必须要用javascript创建一个XMLHTTPRequest对象。(IE把XMLHTTPRequest实现为一个ActiveX对象,其他的浏览器[如Firefox/Safari/Opear]则把它实现为一个本地的javascript对象)。下面我们就来看看具体怎么运用javascript来创建它吧



Js代码
1.<SPAN style="FONT-SIZE: small"><script language="javascript" type="text/javascript">  
2.<!--  
3.    var xmlhttp;  
4.    // 创建XMLHTTPRequest对象  
5.    function createXMLHTTPRequest(){  
6.        if(window.ActiveXObject){ // 判断是否支持ActiveX控件  
7.            xmlhttp = new ActiveObject("Microsoft.XMLHTTP"); // 通过实例化ActiveXObject的一个新实例来创建XMLHTTPRequest对象  
8.    }  
9.    else if(window.XMLHTTPRequest){ // 判断是否把XMLHTTPRequest实现为一个本地javascript对象  
10.        xmlhttp = new XMLHTTPRequest(); // 创建XMLHTTPRequest的一个实例(本地javascript对象)  
11.    }  
12.    }  
13.//-->  
14.</script></SPAN> 
分享到:
评论

相关推荐

    Js拦截全局ajax请求

    3. 数据格式转换:根据需求将服务器返回的数据格式化为适合前端使用的格式。 4. 权限验证:在请求发送前检查用户是否有权限访问特定资源。 5. A/B测试:动态修改请求参数,以测试不同版本的后端效果。 综上所述,...

    FormData:FormData支持其中window.FormData未定义

    在前端开发中,FormData对象是HTML5引入的一个重要特性,用于构建和发送数据,通常与XMLHttpRequest或fetch API配合使用,以实现异步数据提交。然而,在某些情况下,你可能会遇到"FormData:FormData支持其中window....

    ajax经典实例大全1,参看源码附件。。。。。。

    if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft....

    JSP XMLHttpRequest动态无刷新及其中文乱码处理.docx

    if (window.XMLHttpRequest) { // 支持标准浏览器 http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/html'); } } else if (window....

    XMLHttpRequest中文参考手册[PDF]

    现代浏览器也提供了`new window.XMLHttpRequest()`或`new window.fetch()`(更现代的替代方案)。 2. **初始化请求** 初始化请求通常通过`open()`方法完成,需要指定请求类型(GET、POST等)、URL以及是否异步执行...

    「JavaScript」JS四种跨域方式详解

    在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 二、通过修改document.domain来跨子域 浏览器都有一...

    文件的下载-包括前后端的对接说明.docx

    Blob对象下载是通过XMLHttpRequest(XHR)请求获取文件数据,然后利用Blob对象创建下载链接。这样可以获取更多的控制权,如进度信息、预览等。示例代码片段: ```javascript axios.get('/download', { response...

    前端网络——Ajax使用

    AJAX是什么? AJAX 可以用于创建快速动态的网页。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 ajax(Asynchronous javaScript and XML 异步的...if (window.XMLHttpRequest) {//代

    Ajax基础详解教程(二)

    在上篇文章给大家介绍了Ajax基础详解教程(一),讲到Ajax中open...if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject(‘Microsoft.XMLHTTP'); } xhr.open('get','1.txt',true)

    前端拍照、截图带后台

    1. window.capturePage:在一些浏览器中,可以使用`window.capturePage`方法来截取整个页面的图像。但这个方法不是标准API,浏览器支持有限。 2. HTML5 Canvas:更通用的方法是利用canvas进行页面截图。遍历页面上...

    AJAX概述(PPT)

    AJAX的核心是XMLHttpRequest对象,它在后台与服务器进行通信,用户在前端界面上不会感受到页面的刷新。AJAX的工作流程通常包括以下几个步骤: 1. 用户在浏览器中触发一个交互事件,比如点击按钮。 2. JavaScript...

    前端项目-fetch.zip

    前端项目-fetch,fetch是window.fetch的javascript polyfill。全局fetch函数是web请求和处理响应的简单方式,不使用xmlhttprequest。这个polyfill编写的接近标准的fetch规范。

    南京烽火面试题.docx

    2. 前端获取后端的 IP:获取后端的 IP 有多种方法,如使用 _XMLHttpRequest_ 对象、_jsonp_ 技术、_WebSocket_ 等。这些方法都可以帮助前端获取后端的 IP,从而实现与后端的交互。 3. 前端如何解决跨域问题:跨域...

    用法JavaScript实现ajax的实例代码_.docx

    } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } ``` 在创建了`XMLHttpRequest`对象后,我们可以通过`open`和`send`方法发送GET或POST请求。GET请求通常用于获取资源,而POST请求则...

    JS端基于download.js实现图片、视频时直接下载而不是打开预览

    } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } // 设置请求方式和URL,开启异步 xmlHttp.open("GET", url, true); // 关键步骤:设置响应类型为blob xmlHttp.responseType = '...

    Ajax引擎 ajax请求步骤详细代码

    AJAX引擎其实是一个JavaScript对象,全写是 window.XMLHttpRequest对象,由于浏览器的版本不同,特别是老版本的IE浏览器,虽然也支持AJAX引擎,但是写法上有区别,在IE低版本中通常用 ActiveXObject对象来创建AJAX...

    ajax文档加源代码

    window.alert("你的浏览器不支持创建XMLhttpRequest对象"); } return xmlHttp; } ``` 2. 提交数据到服务器并接收响应: 创建好XMLHttpRequest对象后,我们需要用它来发送请求。这通常通过调用`open()`和`send...

    Ajax 文件上传

    let xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener('progress', function(event) { // 更新进度条 }); return xhr; }, success: function(response) { // 处理成功响应 }, error: ...

    使用Struts2和jQuery EasyUI实现简单CRUD系统

    if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } if (xmlhttp != null) { xmlhttp....

    前端开源库-jsdom-papandreou

    5. **XMLHttpRequest 模拟**:JSDOM 提供了 `window.XMLHttpRequest` 对象的模拟,允许在 Node.js 环境中进行异步数据请求。 6. **网络接口模拟**:JSDOM 也提供了一些网络相关的 API 模拟,如 `location.href` 和 ...

Global site tag (gtag.js) - Google Analytics