- //第一步:创建XMLHttpRequest对象
- varxml;
- varresultNode=document.getElementById("result");
- if(window.XMLHttpRequest){
- xml=newXMLHttpRequest();
- if(xml.overrideMimetype){
- xml.overrideMimeType("text/xml");
- }
- }elseif(window.ActiveXObject){
- varMSXML=['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0',
- 'MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
- for(varn=0;n<MSXML.length;n++){
- try{
- xml=newActiveXObject(MSXML[n]);
- break;
- catch(e){
- }
- if(xml==null){
- resultNode.innerHTML="不能建立XMLHttpRequest对象";
- returnfalse;
- }
@H_301_0@ “window.XMLHttpRequest”为true时表示当前浏览器是IE7或其他浏览器,我们就可以使用new XMLHttpRequest()的方式来创建一个XMLHttpRequest对象 @H_301_0@ if(xmlhttp.overrideMimetype)这个逻辑的作用是解决部分版本的Mozilla在服务器响应头信息没有XML时不能正常工作的问题。 @H_301_0@ @H_301_0@ “window.ActiveXObject”为true时表示当前的浏览器为IE6.0及以下的版本,要使用new ActiveXObject(控件名)的方式来创建一个XMLHttpRequest对象 @H_301_0@ 这里需要注意的是不同版本IE中用于建立XMLHttpRequest对象的控件版本很多 @H_301_0@ 如果使用MSXML数组中的某一个控件名称成功建立了XMLHttpRequest对象,则跳出循环,如果建立失败会有异常抛出,被catch以后继续进行循环,尝试下一个控件名称 @H_301_0@ 这里的控件名称是按照从新到老的顺序排列的,这样可以保证使用较新版本IE的用户可以较早成功建立XMLHttpRequest对象。 @H_301_0@ 如果没有建立成功XMLHttpRequest对象,则不能继续后面与服务器端交互的工作,函数只能返回。 @H_301_0@ @H_301_0@ 第二步:注册回调方法 @H_301_0@ 希望服务器端的数据返回给浏览器时执行回调方法(注册的是方法名) @H_301_0@ //第二步:注册回调方法
xml.onreadystatechange = callback; @H_301_0@ @H_301_0@ 然后我们做的工作是设置一个回调函数 @H_301_0@ 回想前面我们说过的AJAX的模式的特点,由于我们采用异步交互的模型,不像同步模式一样可以直接接收响应内容, @H_301_0@ 因此我们需要告诉AJAX引擎当响应数据回来时我要做一些工作,这些工作就是回调函数中的内容。 @H_301_0@ 这里需要注意的是设置回调函数时应该只给出回调函数的名称,后面不要带括号, @H_301_0@ 因为带上括号就变成让XMLHttpRequest对象的onreadystatechange属性值等于回调函数的返回值了。 @H_301_0@ @H_301_0@ 第三步:设置和服务器端交互的相应参数 @H_301_0@ @H_301_0@ 第四步:设置向服务器发送的数据,启动和服务器端的交互 @H_301_0@ @H_301_0@ 第三步和第四步的代码: @H_301_0@ 首先 :name = encodeURI(encodeURI(name)); @H_301_0@ 接着: @H_301_0@
copy