XMLHttpRequest是Ajax的核心,通过调用XMLHttpRequest对象的属性和方法可以实现在客户端和浏览器之间进行数据的异步传输,从而实现页面的无刷新效果。
 
XMLHttpRequest对象的常用属性:
  1. onreadystatechange:指定当readyState属性值改变时的事件处理句柄(只写);
  2. readyState:返回当前请求的状态(只读);
  3. responseText:将相应信息作为字符串返回(只读);
XMLHttpRequest对象的常用方法:
  1. open():创建一个新的HTTP请求,并制定此请求的方法,URL以及验证信息(用户名/密码);
  2. send():发送请求到HTTP服务器并接受回应。
XMLHttpRequest对象的使用需要四个步骤:
  1. 初始化XMLHttpRequest对象
  2. 指定响应处理函数
  3. 发送HTTP请求
  4. 处理服务器返回的信息
 

一、初始化XMLHttpRequest对象

    在使用XMLHttpRequest对象之前需要将XMLHttpRequest对象实例化,因为各个浏览器对这个实例化过程的实现不同,所以针对不同的浏览器实例化XMLHttpRequest对象的方式也不尽相同。
    针对微软IE浏览器:
        var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    针对其他的浏览器:
        var xmlHttp = new XMLHttpRequest();
    所以,综合了这两种实例化XMLHttpRequest的形式,就可以提取出一个实例化的公共方法,代码如下:
    //实例化XMLHttpRequest对象 
    function createXMLHttpRequest(){ 
        if(window.XMLHttpRequest){ 
            xmlHttp = new XMLHttpRequest();  
        }else if(window.ActiveXObject){ 
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
    }
 

二、指定响应处理函数

    接下来就要指定当服务器返回信息时客户端的处理方式。只需将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性即可,比如:
        xmlHttp.onreadystatechange = callBack; 
    需要说明的是,这个函数名称不加括号,不带参数;也可以使用JavaScript即时定义函数的方式定义响应函数,比如:
        xmlHttp.onreadystatechange = function(){ 
            // Do something... 
        } 
 

三、发送HTTP请求

指定响应处理函数后,就可以向服务器发出HTTP请求了。这需要调用XMLHttpRequest对象的open()和send()方法。
        xmlHttp.open("get/Post","URL",true/false); 
        xmlHttp.send(null); 
 

3.1 open()方法详解

//XMLHttpRequest对象的open()方法原型
void open(string method, string URL , boolean asynch, string username, string password);
open()方法表示会建立对服务器的调用,这是初始化一个请求的纯脚本方法。
它有2个必要的参数,还有3个可选的参数。method表示向服务器发送信息的方式,可以为Get或Post;URL表示所调用的服务器资源的URL;asynch是一个布尔值,指示这个调用时异步还是同步,默认为true;username和password允许我们指定一个特定的用户名和口令。 一般使用时只取前三个参数即可。
 

3.2 send()方法详解

//XMLHttpRequest对象的send()方法原型 
void send(content);
send()方法具体向服务器发送请求。如果请求声明为异步的,这个方法就会立即返回,否则它会等待,知道接收到响应为止。参数content是可选的,可以是一个DOM对象的实例、一个输入流或一个串。传入的内容会作为请求体的一部分发送。
 

四、处理服务器返回的信息

在第二部中我们为XMLHttpRequest指定了响应处理函数,响应处理函数检查XMLHttpRequest对象的readyState属性值的变化,如果readyState值为4时,代表服务器已经传回所有信息,可以开始处理信息并更新页面内容了。
function callBack(){ 
    if(xmlHttp.readyState==){ 
    if(xmlHttp.status==){ 
        //do something with xmlHttp.responseText; 
        xmlHttp.responseText; 
            }
    } 
}
 

4.1 readyState属性详解

readyState属性用来表示请求的状态,有5个可取值,分别是:
“0”:表示未初始化,即对象已经建立,但是尚未初始化(尚未调用open()方法);
“1”:表示正在加载,此时对象已建立,尚未调用send()方法;
“2”:表示请求已发送,即send()方法已调用;
“3”:表示请求处理中;
“4”:表示请求已完成,即数据接收完毕。
 

4.2 status、statusText属性详解

status:返回当前请求的HTTP状态码(只读);
statusText:返回当前请求的响应行状态(只读)。
 

4.3 responseText、responseXML属性详解

responseText属性表示服务器的文本响应,其处理结果以字符串形式返回。
responseXML属性表示服务器响应,其结果将格式化为XML Document对象。
 
上述四个步骤,就是XMLHttpRequest对象在Ajax程序中的运行周期,即初始化、指定响应函数、发送请求、处理响应。
 
下面是本示例的完整代码:
var xmlHttp; 

function AjaxFunction(){
createXMLHttpRequest();
if(xmlHttp!=null){
xmlHttp.onreadystatechange = callBack;
xmlHttp.open("get/Post","URL",true/false);
xmlHttp.send(null);
}
} //实例化XMLHttpRequest对象
function createXMLHttpRequest(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
} //指定响应函数
function callBack(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
//do something with xmlHttp.responseText;
xmlHttp.responseText;
}
}
}

最新文章

  1. win8/8.1 免密码登录设置
  2. EntityFramework 6.1.2-beta2
  3. python 模块zlib 压缩与解压
  4. (转)HTML文档头部信息
  5. How to modify squashfs image
  6. ubuntu texlive 中文的配置方法
  7. SQLite/嵌入式数据库
  8. ios微信自动播放音乐
  9. 华为云提供针对Nuget包管理器的缓存加速服务
  10. eclipse 创建maven 项目 动态web工程完整示例 maven 整合springmvc整合mybatis
  11. oracle导入.dmp文件
  12. 小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件
  13. C166 结构按字节访问的设置
  14. 使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识别
  15. TimescaleDB比拼InfluxDB:如何选择合适的时序数据库?
  16. Ajax的async属性
  17. ElasticStack系列之十 & 生产中的问题与解决方案
  18. CentOS 6.7 编译PHP7 make时出现错误:undefined reference to `libiconv_close’
  19. springcloud(七) feign + Hystrix 整合 、
  20. win10 跳过max path 260限制

热门文章

  1. 2016-2017 ACM-ICPC CHINA-Final
  2. 笔记-python-tutorial-4.controlflow( and function)
  3. easyui tree datagrid动态添加表头和表格数据,动态弹出框,修改和删除按钮
  4. laravel5.2总结--关联关系
  5. Hyper-V 虚拟机快照:常见问题
  6. 63、加速android应用(转载)
  7. leetcode 【 Sort List 】 python 实现
  8. hnust 聚宝盆
  9. [报错处理]Could not find a version that satisfies the requirement xml (from versions)
  10. node中fileSystem改promise