XMLHttpRequest最早是在 IE5 中以activeX组件形式实现。XMLHttpRequest并不是一个W3C标准。
IE所XMLHttpRequest实现为一个ActiveX对象,其他浏览器把它实现为一个本地JavaScript对象。
创建XMLHttpRequest对象
var xmlHttp; function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else { if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } }
XMLHttpRequest方法和属性
-
标准XMLHttpRequest操作
- abort()——停止当前请求
- getAllResponseHeaders()——把HTTP请求的怕有响应首部作为键/值对返回
- getResponseHeader('header')——返回指定首部的串值
- open('method','url')——建立对服务器的调用。method参数可以是GET、POST或PUT。url可以是相对URL或绝对URL。这个方法还包括3个可选
- send(content)——向服务器发送请求
- setRequestHeader('header','value')——把指定首部设置为所提供的值。在设置任何首部之前必须调用open()
void open(string method, string url, boolean asynch, string username, string password):第三个参数指示异步的还是同步的,默认值为true,表示请求本质上是异步的。如果这个参数为false处理会等待,直到从服务器返回响应为止。最后两个参数允许你指定一个特定的用户和密码。
void send(content):向服务器发送请求。如果请求声明为异步的,这个方法就会立即返回,否则直到接收到响应为止。参数可以是DOM对象的实例、输入流,或者串。体入这个方法的内容会作为请求体的一部分发送。
void setRequestHeader(string header, string value):这个方法为HTTP请求中一个给定的首部设置值。这个方法必须在调用open()之后才能调用。
-
标准 XMLHttpRequest属性
onreadystatechange——每个状态改变时都会触发这个处理器,通常会调用一个JavaScript函数
readyState——请求的状态,有5个可取值:0=未初始化,1=正在加载,2=已加载,3=交互中,4=完成
responseText——服务器的响应,表示为一个文本串
responseXML——服务器的响应,表示XML,这个对象可以解析为一个DOM对象
status——服务器HTTP状态码(200对应OK,404对应页面未找到,等等)
statusText——HTTP状态码的相应文本(OK或页面未找到等等)
服务器返回内容类型
服务器返回的内容要设置成text/xml、text/plain,因为XMLHttpRequest对象只能处理text/html类型的结果。
不缓存页面内容
使用浏览器不会在本地缓存结果,服务器端需设置以下HTTP头信息:
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setHeader("EXpires",0);
客户端JavaScript设置:
request.setRequestHeader("Cache-Control","no-cache");
request.setRequestHeader("Pragma","no-cache");
request.setRequestHeader("EXpires",0);
回调方法通常写法
function callback(){ if(xmlHttp.readyState == 4){ if(xmlHttp.status == 200){ //do something interesting here } } }
POST方式请求头所需设置
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");