转:

传统的Web应用请求服务器返回的一般是是完整的HTML页面,这样往往就需要页面进行刷新操作,不仅耗时而且用户体验度也不好。最典型的代表就是form表单登录操作了。如果登录失败往往是跳转到原网页重新登陆,如果是这种情况话就会造成资源的浪费,因为返回的HTMl网页中大多数元素都是重复的。

正因为这些原因后来才出现了ajax,它是一种交互式的网页开发技术,而XMLHttpRequest是它的核心的内容,它能够为页面中的JavaScript脚本提供特定的通信方式,从而使页面的javascript脚本和服务器之间形成动态交互的效果,XMLHTTPRequest的最大的优点是页面内的javascript脚本可以不用刷新页面,而直接和服务器发生交互,从而实现页面无刷新的效果。

1.下面首先来介绍一下XMLHttpRequest的详细属性和方法:

 

方法和属性

描述

Open(String method,String url,Boolean ansynch,String username,String password)

指定和服务器端交互的HTTP方法,URL地址及其他请求信息。

其中method表示HTTP请求方法。支持所有HTTP的方法,一般使用“GET”,“POST”url表示请求的服务器的地址

Asynch表示是否采取异步方式,true表示异步,false表示同步

后两个参数可以不指定,usrename和password分别表示用户名和密码,提供http认证机制需要的用户名和密码

Send(content)

向服务器发出请求,如果采用异步方式,该方法会立即返回

Content可以不指定或者指定为null表示不发送数据

其内容可以使DOM对象,输入流或是字符串

setRequestHeader(String header,String value)

设置HTTP请求中的指定头部header的值为value。
次方法需在open方法以后调用

getAllReponseHeader()

返回包含HTTP的所有响应头包括Content-Length,Date,URI等内容

返回值是一个字符串,包含所有头信息,其中每一个键名和键值用冒号分开,每一组键之间用CR和LF(回车加换行符)来分隔

GetResponseHeader(String header)

返回HTTP响应头中指定的键名header对应的值

Abort()

停止当前http请求,对应的XMLHttpRequest对象会复位到未初始化的状态

responseText

服务器响应的文本内容

ResponseXML

服务器响应的XML内容对应的DOM对象

Status

服务器返回的http状态码

200表示“成功”,404表示“未找到”。500表示“服务器内容部错误”

statusText

服务器返回状态码的文本信息

readyState

表示XMLHttpRequest对象的状态

0=未初始化。对象已创建,未调用open

1=open方法成功调用以后。Send方法未调用

2=send方法已经调用,尚未开始接受数据

3=正在接受数据。Http响应头信息已经接受,响应数据尚未接受完成。

4=完成。响应数据接受完成。

Onreadystatechage

请求状态改变的时间触发器(readyState变化时会调用这个属性上注册的javascript函数)

 

2.然后介绍一下XMLHttpRequest的使用步骤:

 

一、初始化XMLHttpRequest对象

在使用XMLHttpRequest对象之前需要将XMLHttpRequest对象实例化,因为各个浏览器对这个实例化过程的实现不同,所以针对不同的浏览器实例化XMLHttpRequest对象的方式也不尽相同。

针对微软IE浏览器:

  1. var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

针对其他的浏览器:

  1. var xmlHttp = new XMLHttpRequest();

所以,综合了这两种实例化XMLHttpRequest的形式,就可以提取出一个实例化的公共方法,代码如下:

  1. //实例化XMLHttpRequest对象
  2. function createXMLHttpRequest(){
  3. if(window.XMLHttpRequest){
  4. xmlHttp = new XMLHttpRequest();
  5. }else if(window.ActiveXObject){
  6. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  7. }
  8. }

二、指定响应处理函数

接下来就要指定当服务器返回信息时客户端的处理方式。只需将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性即可,比如:

  1. xmlHttp.onreadystatechange = callBack;

需要说明的是,这个函数名称不加括号,不带参数;也可以使用JavaScript即时定义函数的方式定义响应函数,比如:

  1. xmlHttp.onreadystatechange = function(){
  2. // Do something...
  3. }

三、发送HTTP请求

指定响应处理函数后,就可以向服务器发出HTTP请求了。这需要调用XMLHttpRequest对象的open()和send()方法。

  1. xmlHttp.open("get/Post","URL",true/false);
  2. xmlHttp.send(null);

3.1 open()方法详解

  1. //XMLHttpRequest对象的open()方法原型
  2. void open(string method, string URL , boolean asynch, string username, string password);

open()方法表示会建立对服务器的调用,这是初始化一个请求的纯脚本方法。

它有2个必要的参数,还有3个可选的参数。method表示向服务器发送信息的方式,可以为Get或Post;URL表示所调用的服务器资源的URL;asynch是一个布尔值,指示这个调用时异步还是同步,默认为true;usernamepassword允许我们指定一个特定的用户名和口令。 一般使用时只取前三个参数即可。

3.2 send()方法详解

  1. //XMLHttpRequest对象的send()方法原型
  2. void send(content);

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

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

在第二部中我们为XMLHttpRequest指定了响应处理函数,响应处理函数检查XMLHttpRequest对象的readyState属性值的变化,如果readyState值为4时,代表服务器已经传回所有信息,可以开始处理信息并更新页面内容了。

  1. function callBack(){
  2. if(xmlHttp.readyState==4){
  3. if(xmlHttp.status==200){
  4. //do something with xmlHttp.responseText;
  5. xmlHttp.responseText;
  6. }
  7. }
  8. }

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程序中的运行周期,即初始化、指定响应函数、发送请求、处理响应。

下面是本示例的完整代码

    1. var xmlHttp;
    2. function AjaxFunction(){
    3. createXMLHttpRequest();
    4. if(xmlHttp!=null){
    5. xmlHttp.onreadystatechange = callBack;
    6. xmlHttp.open("get/Post","URL",true/false);
    7. xmlHttp.send(null);
    8. }
    9. }
    10. //实例化XMLHttpRequest对象
    11. function createXMLHttpRequest(){
    12. if(window.XMLHttpRequest){
    13. xmlHttp = new XMLHttpRequest();
    14. }else if(window.ActiveXObject){
    15. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    16. }
    17. }
    18. //指定响应函数
    19. function callBack(){
    20. if(xmlHttp.readyState==4){
    21. if(xmlHttp.status==200){
    22. //do something with xmlHttp.responseText;
    23. xmlHttp.responseText;
    24. }
    25. }
    26. }

XMLHttpRequest的用法的更多相关文章

  1. XMLHttpRequest对象用法

    xmlhttprequest is what? 用户后台与服务器交换数据. 可以在不重新加载页面的情况下更新网页: 在页面已加载后从服务器请求数据: 在页面已加载后从服务器接收数据: 在后台向服务器发 ...

  2. mui初级入门教程(三)— html5+ XMLHttpRequest 与mui ajax用法详解

    文章来源:小青年原创发布时间:2016-05-29关键词:mui,html5+,XMLHttpRequest,ajax,懒加载转载需标注本文原始地址: http://zhaomenghuan.gith ...

  3. JavaScript的XMLHttpRequest对象

    ajax的核心技术是XMLHttpRequest对象,简称XHR. //支持IE7及更高的版本 function createXML() { if(typeof XMLHttpReqquest!=&q ...

  4. AJAX(一)

    AJAX(一) Ajax是Asynchronous Javascript和XML的简写,这一技术能够向服务器请求额外的数据而无需卸载页面,会带来更好的用户体验. [前面的基础知识][关于同步和异步的了 ...

  5. 探求网页同步提交、ajax和comet不为人知的秘密(上篇)

    标题里的技术都是web开发里最常见的技术,但是我想这些常用的技术有很多细节是很多朋友不太清楚的,理解这些细节是我们深入掌握这些技术的一把钥匙,今天我就讲讲我使用这些技术时体会到的这些细节. 同步提交是 ...

  6. Ajax基本概念和原理

    什么是Ajax Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. Ajax的全称是Asynchronous JavaScript and XML,即异步JavaScript+X ...

  7. 初探Ajax

    1.什么是Ajax Ajax是Asynchronous JavaScript and XML的缩写,这一技术能从服务器请求额外数据而无需卸载页面.传统的HTTP请求流程大概是这样的,浏览器向服务器发送 ...

  8. JavaScript Promise API

    同步编程通常来说易于调试和维护,然而,异步编程通常能获得更好的性能和更大的灵活性.异步的最大特点是无需等待."Promises"渐渐成为JavaScript里最重要的一部分,大量的 ...

  9. JavaScript系列----AJAX机制详解以及跨域通信

    1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...

随机推荐

  1. mysql优化之索引建立的规则

    索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到 ...

  2. poj3034--Whac-a-Mole(dp)

    题目链接:id=3034">点击打开链接 题目大意:砸地鼠游戏,n*n的方格,锤子每次最多移动d,地鼠在t时刻出如今(x,y)时间.维持一个单位时间,不会在同一时间同一位置出现两仅仅老 ...

  3. JSP页面的编码设置(转载)

    1. pageEncoding:<%@ page pageEncoding="UTF-8"%> jsp页面编码: jsp文件本身的编码 2. contentType: ...

  4. 【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)

    主要内容: 1.基于多层感知器的mnist手写数字识别(代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...

  5. 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现

    问题分析 输入:用户个人收入 输出:该用户要缴纳的个人所得税 约束:不允许使用过多的 if 语句 解答思路 最简单的方法是根据不同的税率区间,创建多个 if 语句来求解.但如此一来便会有 25 个 i ...

  6. 带缓冲的IO( 标准IO库 )

    前言 在之前,学习了 read write 这样的不带缓冲IO函数.而本文将讲解标准IO库中,带缓冲的IO函数. 为什么要有带缓冲IO函数 标准库提供的带缓冲IO函数是为了减少 read 和 writ ...

  7. c/c++标准库中的文件操作总结

    1 stdio.h是c标准库中的标准输入输出库 2 在c++中调用的方法 直接调用即可,但是最好在函数名前面加上::,以示区分类的内部函数和c标准库函数. 3 c标准输入输出库的使用 3.1 核心结构 ...

  8. tomcat安装后问题解决

      tomcat安装后问题解决 (1)tomcat无法正常启动的原因分析 JAVA_HOME 配置错误,或者没有配置 如果你的机器已经占有了8080 端口,则无法启动, 解决方法 (1) 你可以808 ...

  9. HttpURLConnection访问网络

    HttpURLConnection是一个抽象类,获取HttpURLConnection对象HttpURLConnection urlConnection=new URL(http://www.baid ...

  10. LVS项目介绍

    LVS项目介绍 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Serve ...