xmlHttpRequset 详解

/*

*author Jouy.lu

*/

var xmlHttp; //首先定义一个全局域变量来保存对象的引用;

function createXMLHttpRequest(){ //该方法用来创建XMLHttpRequest对象的实例.

 if(window.ActiveXObject){

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

 }else if(window.XMLHttpRequest){

  xmlhttp = new XMLHttpRequest();

 } 

}

 

//考虑到兼容浏览器的问题:建议的写法如下:

 

var xmlhttp;

function createXmlhttp(){ 

if(window.XMLHttpRequest){

xmlhttp = new XMLHttpRequest();

if (xmlhttp.overrideMimeType){

xmlhttp.overrideMimeType("text/xml");

}

  

}

else if(window.ActiveXObject){

try{

xmlhttp = new  ActiveXObject("Msxml2.XMLHTTP");

}catch(e){

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

}

}

if(!xmlhttp){

window.alert("Your broswer not support XMLHttpRequest!");

}

return xmlhttp;

}

/************************************XMLHttpRequest的标准操作*********************

abort():终止当前请求;

getAllResponseHeaders():把HTTP所以响应首部作为键/值对返回;

getResponseHeader("header");返回指定首部的串值;

open("POST/GET/PUT","url");建立对服务器的调用,url参数可以是相对URL或绝对URL,该方法还包含了另三个可选参数;

send(content);向服务器发送请求;

setRequestHeader("header","value");把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()。

 注:

  void open(string method, string url, boolean asynch, string username, string password):这个方法会建立对服务器的调用。

 要提供调用的特定方法(GET、POST或PUT),还要提供所调用资源的URL。另外还可以传递一个Boolean值,指示这个调用是异步还是同步的,

 默认值为true,这表示请求本质上是异步的。如果这个参数为false,处理就会等待,直到从服务器返回响应为止。由于异步调用是使用Ajax

 的主要优点之一,所以倘若将这个参数设置为false,从某种程度上讲与使用XMLHttpRequest对象的初衷不太相符。在某些情况下这,个参数

 设置为false也是有用的,比如在持久存储页面之前你可能想先验证用户的输入。最后两个参数不说自明,允许你指定一个特定的用户名和口令。

  void send(content):这个方法具体向服务器发出请求。如果请求声明为异步的,这个方法就会立即返回,否则它会等待,直到接收到响应

 为止。参数是可选的,可以是一个DOM对象的实例、一个输入流,或者是一个串。传入这个对象的内容会作为请求体的一部分发送。

  void setRequestHeader(string header, string value):这个方法为HTTP请求中一个给定的首部设置值。它有两个参数,第一个串表

 示要设置的首部,第二个串表示要在首部中放置的值。需要说明,这个方法必须在open()之后才能调用。在所有这些方法中,最有可能用到

 的就是open()和send()。XMLHttpRequest对象还有许多属性,在设计Ajax交互时这些属性非常有用。

  void abort(): 顾名思义,这个方法就是要停止请求。

  string getAllResponseHeaders(): 这个方法的核心功能对Web应用开发人员应该很熟悉了,它会返回一个串,其中包含HTTP请求的所有响

 应首部。首部包括Content-Length、Date和URI。

  string getResponseHeader(string header):这个方法与getAllResponseHeaders()是对应的,不过它有一个参数来表示你希望得到哪一个

  首部值,并且会把这个值作为一个串返回。

 

 

******************************/

 

 

 

/*******************************标准XMLHttpRequest属性**********************

onreadystatechange:每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数。

readyState:请求的状态。有5个可取值:0 = 未初始化,1 = 正在加载, 2 = 已加载, 3 = 交互中, 4 = 完成。

responseText:服务器的响应,表示为一个串。

responseXML:服务器的响应,表示为XML。这个对象可以解析为一个DOM对象。

status:服务器的HTTP状态码(200对应OK,404对应Not Found(未找到),等等).

statusText:HTTP状态码的相应文本(OK或Not Found(未找到)等等)。

***************************************************************************

*/

 

/*********************来看看到底要怎么才能发送请求*******

 

使用XMLHttpRequest对象发送请求的基本步骤如下:

 1.得到XMLHttpRequest对象实例的一个引用,为此,可以创建一个新的实例,也可以访问包含有

XMLHttpRequest实例的一个变量。

 

 2.告诉XMLHttpRequest对象,哪个函数会处理XMLHttpRequest对象状态的改变。为此要把对象的

onreadystatechange属性设置为指向一个JavaScript函数的指针。

 3. 指定请求的属性。XMLHttpRequest对象的open()方法会指定将发出的请求。open()方法取3个

 参数:一个是指示所用方法(通常是GET或POST)的串,另一个是表示目标资源URL的串,还有一

个Boolean值,指示请求是否是异步的。

 4. 将请求发送给服务器。XMLHttpRequest对象的send()方法会把请求传送到指定的目标资源。

send()方法接受一个参数,这通常是一个串或一个DOM对象。这个参数会作为请求体的一部分传送到

目标URL.向send()方法提供参数时,要确保open()中指定的方法是POST。如果没有数据要作为请求体

的一部分发送,则使用null。

 

异步方式给用户带来的体验:(我想程序员看到这段解释,心里真的很爽!)

 对服务器的请求是异步发送的,因此浏览器可以继续响应用户输入,并在后台等待服务器的响应。

如果选择同步操作,而且倘若服务器的响应要花好几秒才能到达,浏览器就会表现得很迟钝,在

等待期间不能响应用户的输入。这样一来,浏览器好像被冻住一样,无法响应用户输入,而异步

做法可以避免这种情况,从而让最终用户有更好的体验,尽管这种改善很细微,但确实很有意义。

这样用户就能继续工作,而且服务器会在后台处理先前的请求。能与服务器通信而不打断用户的

工作流,这样就可以采用很多技术来改善用户体验。例如,假设有一个验证用户输入的应用。用

户在输入表单上填写各个域时,浏览器可以定期地向服务器发送表单值来进行验证,此时并不打

断用户,他还可以继续填写余下的表单域。如果某个验证规则失败,用户会立即得到通知,而不

必等表单真正发送到服务器进行处理时才知道有错误,这就能大大节省用户的时间,也能减轻服

务器上的负载压力,因为不必在表单提交不成功时完全重建表单的内容。

 

下面是说明安全问题的:

 XMLHttpRequest对象要受制于浏览器的安全“沙箱”。XMLHttpRequest对象请求的所有资源

都必须与调用脚本在同一个域(domain)内。这个安全限制使得XMLHttpRequest对象不能请

求脚本所在域之外的资源。这个安全限制的强度如何因浏览器而异(见图2-5)。Internet Explorer

会显示一个警告,指出可能存在一个安全风险,但是用户可以选择是否继续发出请求。Firefox则

会断然停止请求,并在JavaScript控制台显示一个错误消息。Firefox确实提供了一些JavaScript技巧,

使得XMLHttpRequest也可以请求外部URL的资源。不过,由于这些技术针对特定的浏览器,最好不要用,

而且要避免使用XMLHttpRequest访问外部URL。

 

**********************************************************

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值