XMLHttpRequest的浏览器兼容代码写法
作者:winter 来源:51js 时间:2008-09-02 10:46:00
XMLHttpRequest的兼容代码功能结构上大体没有什么变动
主要处理了这么几条:
1.不同浏览器的创建方式
2.事件大小写问题(ie7的XMLHttpRequest)
3.this指向问题(ie6的ActiveX)
4.增加了2个事件onerror和onfinish
部分代码方便阅读:
function HttpRequest()
{
if(this==window)throw new Error(0,"HttpRequest is unable to call as a function.")
var me=this;
var asyncFlag=false;
var typeFlag=false;
var r;
function onreadystatechange()
{
if(me.onreadystatechange)me.onreadystatechange.call(r);
if(r.readyState==4)
{
if(Number(r.status)>=300)
{
if(me.onerror)me.onerror.call(r,new Error(0,"Http error:"+r.status+" "+r.statusText));
if(typeFlag)r.onreadystatechange=Function.prototype;
else r.onReadyStateChange=Function.prototype;
r=null;
return;
}
me.status=r.status;
me.statusText=r.statusText;
me.responseText=r.responseText;
me.responseBody=r.responseBody;
me.responseXML=r.responseXML;
me.readyState=r.readyState;
if(typeFlag)r.onreadystatechange=Function.prototype;
else r.onReadyStateChange=Function.prototype;
r=null;
if(me.onfinish)me.onfinish();
}
}
function creatHttpRequest(){
var e;
try{
r=new window.XMLHttpRequest();
typeFlag=true;
} catch(e) {
var ActiveXName=[
'MSXML2.XMLHttp.6.0',
'MSXML2.XMLHttp.3.0',
'MSXML2.XMLHttp.5.0',
'MSXML2.XMLHttp.4.0',
'Msxml2.XMLHTTP',
'MSXML.XMLHttp',
'Microsoft.XMLHTTP'
]
function XMLHttpActiveX()
{
var e;
for(var i=0;i<ActiveXName.length;i++)
{
try{
var ret=new ActiveXObject(ActiveXName[i]);
typeFlag=false;
} catch(e) {
continue;
}
return ret;
}
throw {"message":"XMLHttp ActiveX Unsurported."};
}
try{
r=new XMLHttpActiveX();
typeFlag=false;
} catch(e) {
throw new Error(0,"XMLHttpRequest Unsurported.");
}
}
}
creatHttpRequest();
this.abort=function(){
r.abort();
}
this.getAllResponseHeaders=function(){
r.getAllResponseHeaders();
}
this.getResponseHeader=function(Header){
r.getResponseHeader(bstrHeader);
}
this.open=function(Method,Url,Async,User,Password){
asyncFlag=Async;
try{
r.open(Method,Url,Async,User,Password);
} catch(e) {
if(me.onerror)me.onerror(e);
else throw e;
}
}
this.send=function(Body){
try{
if(typeFlag)r.onreadystatechange=onreadystatechange;
else r.onReadyStateChange=onreadystatechange;
r.send(Body);
//alert("sended");
if(!asyncFlag){
this.status=r.status;
this.statusText=r.statusText;
this.responseText=r.responseText;
this.responseBody=r.responseBody;
this.responseXML=r.responseXML;
this.readyState=r.readyState;
if(typeFlag)r.onreadystatechange=Function.prototype;
else r.onReadyStateChange=Function.prototype;
r=null;
}
} catch(e) {
if(me.onerror)me.onerror(e);
else throw e;
}
//alert("sended");
}
this.setRequestHeader=function(Name,Value){
r.setRequestHeader(Name,Value);
}
}
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
网站设计趋势: iPhones[译]
![](https://img.aspxhome.com/file/UploadPic/20099/21/iphone-45s.jpg)
css样式表滤镜全接触
使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列
![](https://img.aspxhome.com/file/UploadPic/20127/11/2012711161735414.png)
优化 SQL Server 索引的小技巧
空行不空格式排版组织原理
![](https://img.aspxhome.com/file/UploadPic/20105/3/20105314576317s.jpg)
ASP XML操作类代码
IE6 升级要不要?
![](https://img.aspxhome.com/file/UploadPic/20097/23/123541f77cbg214-50s.jpg)
Mobile Web下的编码设计
![](https://img.aspxhome.com/file/UploadPic/20101/28/mobile-web-75s.jpg)
如何防止未经注册的用户绕过注册界面直接进入应用系统?
ASPImage组件的实现过程[图]
![](https://img.aspxhome.com/file/UploadPic/20082/3/200823154516685s.gif)
写给JavaScript库开发者们的规则
asp 各种进制转换函数
asp如何使用MsChart制图工具?
W3C优质网页小贴士(四)
ASP 写的判断 Money 各个位值的函数
Dreamweaver 网页编辑常用表现的实现方法
CSS Hack 汇总快查
ASP访问数量统计代码
FrontPage XP设计教程4——Css样式表的应用
![](https://img.aspxhome.com/file/UploadPic/200810/17/20081017123534164s.jpg)