• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Joyce Liu
博客园    首页    新随笔    联系   管理    订阅  订阅
跨浏览器开发经验总结(六) —— XML文档处理 & XMLHttpRequest对象
在读取、处理XML文件或片断的过程中,要当心别太依赖IE提供的方便属性和方法,而忽略了其他浏览器。 在广泛使用Ajax技术的项目中,又是否有注意过该技术关键对象XMLHttpRequest的浏览器兼容处理?是否真的了解这个对象的属性、方法和工作机制? 反正我就在一次异步请求改成同步的过程中吃过闷亏——只是修改了一个看似不起眼的参数,其他浏览器都好好的,怎么就firefox不起作用了呢?

XML文档处理

加载xml文件

IE:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async="false";

xmlDoc.load("books.xml");

其他浏览器:

xmlDoc=document.implementation.createDocument("","",null);

xmlDoc.async="false";

xmlDoc.load("books.xml");

 

加载xml字符串

IE:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async="false";

xmlDoc.loadXML(txt);

其他浏览器:

parser=new DOMParser();

xmlDoc=parser.parseFromString(txt,"text/xml");

selectNodes()、selectSingleNode()方法

这两个方法是IE才有的,如果考虑跨浏览器,请尽量使用标准DOM操纵方式替代,或者在其他浏览器中先实现以上方法再使用。

xml属性

IE可以用obj.xml来显示obj的节点内容,但是这个属性是其他浏览器没有,所以要用(new XMLSerializer()).serializeToString(obj)方法来显示节点内容。

 

XMLHttpRequest对象

获得IE和其他浏览器中的XMLHttpRequest对象

获得IE和其他浏览器中的XMLHttpRequest对象

function getXMLHTTPRequest()

{

    var myRequest = null;

    if(window.XMLHttpRequest)   // IE以外的浏览器

    {        

        myRequest = new XMLHttpRequest(); 

    }

    else if(typeof ActiveXObject != "undefined")  // IE

    {              

        myRequest = new ActiveXObject("Microsoft.XMLHTTP");

    }          

    return myRequest;          

}

然后我们就可以使用上面的方法来进行请求操作了。

    var myRequest = getXMLHTTPRequest();

    xmlhttp.onreadystatechange=stateChange;

    xmlhttp.open("GET",url,true);

    xmlhttp.send(null);

 

open方法参数说明

xmlhttp.open("GET",url,true)里第一个参数表示请求的方式,“POST”或者“GET”;第二个参数是发送请求的地址;第三个参数是表示是否用异步方式进行请求。如果采用异步方式请求,那么浏览器会在send请求后等待请求地址的响应同时,继续执行send之后的语句,得到响应后执行xmlhttp.onreadystatechange设置的名为stateChange的回调方法,所以要把得到响应后的后继操作写在这个回调方法里。

需要注意的是如果采用同步方式发送请求,浏览器会等请求响应后才执行send之后的语句,所以最好是把响应后的操作直接写在send语句之后,而不是像异步方式请求那样写在xmlhttp.onreadystatechange设置的回调方法中,因为各浏览器在同步请求后是否还执行这个回调方法上还是有些不一致的地方:比如firefox3.0在发送同步请求得到响应后就不触发onreadystatechange事件,自然就不会执行这个回调方法了。

send方法参数的默认值设置

不同浏览器的XMLHttpRequest虽然接口一样,但在不同浏览器中调用XMLHttpRequest的方法和属性却不尽相同。如send方法,在IE中可以不传参数,如myXMLHttpRequest.send();仍然可以正常工作,而在firefox中,必须为send方法传一个参数,也就是说,在firefox中send方法参数没有默认值,必须为其赋值,哪怕是null也可以。

作者:Joyce Liu
出处:http://www.cnblogs.com/joycel/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted on 2010-05-21 09:44  Joyce.L  阅读(2137)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3