日期:2014-05-16  浏览次数:20613 次

Ajax原理及应用二(处理HTTP请求)

1、当在浏览器地址栏中输入网页地址,或者提交表单时,便通过浏览器向Web服务器发送了HTTP请求,HTTP协议规定了Web浏览器如果向Web服务器请求文档,浏览器如何提交表单,Web服务器如何响应客户端请求,以及客户端如何接受及处理服务器响应。
? 详见《HTTP协议讲解》
? 通常情况下,向服务器发送请求,以及接收处理服务器端响应的工作是又浏览器完成。并不是通过JavaScript等客户端脚本完成的。当单击某个超链接时,或者单击提交按钮,或者点击某个定义的超链接时,浏览器便向服务器端发送请求。
? 而目前的大部分浏览器均支持脚本发送HTTP请求,并能够通过脚本处理服务器的响应结果,也就是说,可以通过脚本向Web服务器发送GET或POST请求,并通过脚本操作服务器端返回的响应内容。这种能力使客户端能够隐式的向服务器发送请求,并处理请求结果,但却并不影响客户端用户界面,
2、XMLHttpRequest对象
? 通过脚本处理HTTP请求的能力是基于浏览器提供的XMLHttpRequest对象,该对象提供对HTTP协议的完全访问,通过该对象提供的方法,能够向服务器发送POST或GET请求,并且,能够很容易的获取服务器返回的请求结果。Web服务器的请求结果可以以同步或者异步方式返回。可以是文本的形式或者DOM文档的形式。
?? XMLHttpRequest对象并未标准化,在IE较早的版本中,该对象在IE与其他浏览器中的名称、创建方式并不同。但他们提供相同的功能,所以一般将他们统一称为XMLHttpRequest对象,由W3C起草的标准草案中也采用的是XMLHttpRequest,XMLHttpRequest对象源自微软的创建XMLHTTP请求对象,该对象在处理普通HTTP请求的功能上添加了发送和接收XML代码的功能,但是该对象并不仅限于发送和接收XML代码,它可以接收任何形式的内容。
IE中的XMLHttpRequest对象是一个ActiveX控件对象,需要通过ActiveXObject()构造函数创建,例如:

Ajax代码 复制代码
  1. var?xml_request=new?ActiveXObject("MSXML2.XMLHTTP");??
var xml_request=new ActiveXObject("MSXML2.XMLHTTP");


在IE不同的版本中,所支持XML HTTP库的版本不同,在较新的版本中支持“MSXML2.XMLHTTP”,在较早的IE版本中支持“Microsoft.XMLHTTP”,因此,创建XMLHttpRequest对象时,需要根据用户浏览器中支持的XML HTTP库德版本想ActiveXObject()构造函数传递不同的参数。
下面的代码根据IE支持的XML HTTP库的版本创建相应的XMLHttpRequest对象。

Ajax代码 复制代码
  1. var?xml_http_arr=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; ??
  2. var?xml_request; ??
  3. for(var?i=0;i<xml_http_arr.length;i++){ ??
  4. ????if(xml_request?=?new?ActiveXObject(xml_http_arr.length[i])) ??
  5. ???break; ??
  6. }??
var xml_http_arr=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
var xml_request;
for(var i=0;i<xml_http_arr.length;i++){
    if(xml_request = new ActiveXObject(xml_http_arr.length[i]))
   break;
}


由于XML HTTP对象的强大功能,Mozilla在浏览器中复制看该对象,实现了名为XMLHttpRequest的对象,该对象与IE浏览器中处理XML HTTP的对象完成完全相同的功能,具有相同的属性和方法,其他浏览器也同样实现了自己的XMLHttpRequest对象,在这些浏览器中直接通过XMLHttpRequest()构造函数创建XMLHttpRequest对象,例如:

Ajax代码 复制代码
  1. var?xml_http_request=new?XMLHttpRequest();??
var xml_http_request=new XMLHttpRequest();


IE7中同样提供XMLHttpRequest()构造函数来创建XMLHttpRequest对象,但在IE7之前的版本中,需要通过ActiveXObject()构造函数创建,可以通过下面的脚步实现兼容各种浏览器版本的创建方法。

Ajax代码 复制代码
  1. if(typeof(XMLHttpRequest)=='undefined'?&&?window.ActiveXObject){ ??
  2. ??funciton?XMLHttpRequest(){ ??
  3. ????var?xml_http_arr=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; ??
  4. ????var?xml_reque