创建一个XMLHttp对象
显然,使用一个XMLHttp对象的第一步,是要创建它,因为Microsoft对此的实现是ActiveX控件,所以你也必须在JavaScript中使用ActiveXObject的所有者类,并传递给它一个XMLHttp控件的签名:
var oXmlHttp = new ActiveXObject("Microsoft.XMLHttp");
上述代码创建了XMLHttp对象的第一个版本(其与IE 5.0一同发布),问题是,随着后续MSXML库的发布,也发布了好几个不同的新版本,每次发布都带来了更好的稳定性与更快的速度,所以,必须要确定你使用的是用户电脑上可用的最新版本。每个版本的签名如下:
Microsoft.XMLHttp
MSXML2.XMLHttp
MSXML2.XMLHttp.3.0
MSXML2.XMLHttp.4.0
MSXML2.XMLHttp.5.0
不幸的是,确定可用最佳版本唯一的方法,是依次尝试创建它们。因为其本身为一个ActiveX控件,任何创建对象上的失败,都会抛出一个错误,这意味着你必须在一个try…catch块中编写这些代码,如下:
function createXMLHttp() {
var aVersions = [ "MSXML2.XMLHttp.5.0",
"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
"MSXML2.XMLHttp","Microsoft.XMLHttp"
];
for (var i = 0; i < aVersions.length; i ) {
try {
var oXmlHttp = new ActiveXObject(aVersions[i]);
return oXmlHttp;
} catch (oError) {
//Do nothing
}
}
throw new Error("未安装MSXML!");
}
函数createXMLHttp()中保存了一个XMLHttp签名的数组,经常使用的靠前,并遍历此数组以尝试用每个签名创建一个XMLHttp对象。假如创建失败,catch语句将会捕捉到一个JavaScript错误,并尝试下一个签名。当对象被创建后,它将被返回给调用者,假如函数结束时仍没有创建一个XMLHttp对象,将会抛出一个错误指出创建失败。
幸好,在以上浏览器中创建一个XMLHttp对象还算是比较轻易的,Mozilla Firefox、Safari和Opera都可以使用下面这行代码:
var oXmlHttp = new XMLHttpRequest();
自然地,它以一种跨浏览器的方式帮助开发者创建XMLHttp对象。你还可以修改前面定义过的createXMLHttp()函数,生成一个如下的函数:
function createXMLHttp() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
var aVersions = [ "MSXML2.XMLHttp.5.0",
"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
"MSXML2.XMLHttp","Microsoft.XMLHttp"
];
for (var i = 0; i < aVersions.length; i ) {
try {
var oXmlHttp = new ActiveXObject(aVersions[i]);
return oXmlHttp;
} catch (oError) {
//Do nothing
}
}
}
throw new Error("不能创建XMLHttp对象!");
}
现在,这个函数先检查是否定义了一个XMLHttpRequest类(使用typeof操作符),假如类XMLHttpRequest存在,它将被用于创建XMLHttp对象;否则,函数检查ActiveXObject类是否存在,假如存在,就执行一遍为IE创建XMLHttp对象相同的过程。假如以上两个测试都失败了,就会抛出一个错误。
另一种创建跨浏览器XMLHttp对象的方法,就是使用已为跨浏览器编写的类库:zXml。它由两位作者编写,可从http://www.nczonline.net/downloads/处下载,库中定义了一个创建XMLHttp对象的单一函数:
var oXmlHttp = zXmlHttp.createRequest();
函数createRequest与zXml库本身,将会贯穿全文,以帮助处理有关跨浏览器的Ajax技术。
在创建完一个XMLHttp对象之后,便可预备从JavaScript中发起HTTP请求。首先调用open()方法,由其完成对象的初始化,此方法接受以下三个参数:
1、 请求类型:指示某种请求类型的字符串,GET或POST(这也是目前所有浏览器都支持的类型)。
2、 URL:请求将发送到的某URL。
3、 异步(Async):一个布尔值,由其决定请求是否异步。
最后一个代表异步的参数,在此非常重要,因为它控制了JavaScript怎样执行请求。当设置为true时,请求被异步发送,JavaScript代码不会等待响应而继续执行,必须设置一个事件处理函数以监视对请求的响应。假如设置为false,请求被同步发送,而JavaScript会在继续执行代码之前等待来自服务器的响应;这意味着假如响应需要很长时间,那么用户将不能操作浏览器,直至响应完成。因此,开发Ajax应用程序最好的方法是,对数据的常规返回操作,尽量使用异步请求,而同步请求用于发送和接收与服务器之间的短小信息。
如对某一info.txt文件的异步GET请求,代码如下:
var oXmlHttp = zXmlHttp.createRequest();
oXmlHttp.open("get", "info.txt", true);
请注重此处的第一个参数,也就是请求类型,即使在技术层面要求请求类型全部为大写字符,但此处使用小写也是没关系的。
分享到:
相关推荐
XmlHttp对象参考: 现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
最通用的定义为:XmlHttp是一套可以在...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
最通用的定义为:XmlHttp是... <br>现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
XmlHttp中文参考手册 ...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
XmlHttp是一套可以在Javascript、VbScript...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
XMLHTTP CHM 文档 ...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。 XmlHttp对象参考
XMLHTTP对象参考 XmlHttp是什么?...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。 资源界面:资源下载:
XmlHttp是什么? 最通用的定义为:XmlHttp...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
XmlHttp是什么? 最通用的定义为:XmlHttp...现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。
//针对IE以外的其他浏览器创建的 主要是FireFox xmlrequest=new XMLHttpRequest(); }else if(window.ActiveXObject) { //主要针对IE浏览器的不同版本 try{ xmlrequest=new ActiveXObject("Msxml2.XMLHTTP");...
这行简单的代码在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支持 Ajax 的非 Microsoft 浏览器中,创建了 XMLHttpRequest 对象。但是对于市场占有率达到70%的IE来说,这种方法是不行的,而...
//FireFox、Opera等浏览器支持的创建方式 } else { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式 } } //直接通过XMLHttpRequest对象获取远程网页源代码 function getSource()...
所有现代浏览器(IE7+、Firefox、Chrome、Safari以及Opera)均内建XMLHttpRequest对象。 注:IE5/IE6需要使用ActiveRequest对象。 向服务器发送请求 xmlhttp.open(“GET”,”ajax_info.txt”,true); xmlhttp.send...
这行简单的代码在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支持 Ajax 的非 Microsoft 浏览器中,创建了 XMLHttpRequest 对象。但是对于市场占有率达到70%的IE来说,这种方法是不行...
javascript/js的ajax的GET请求: [removed] /* 创建 XMLHttpRequest... // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else{// code for IE6, IE5 xmlhttp=new ActiveXObj
javascript/js的ajax的GET请求代码如下所示: [removed] ... // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else{// code for IE6, IE5 xmlhttp=new Act