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");
IE:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
其他浏览器:
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
这两个方法是IE才有的,如果考虑跨浏览器,请尽量使用标准DOM操纵方式替代,或者在其他浏览器中先实现以上方法再使用。
IE可以用obj.xml来显示obj的节点内容,但是这个属性是其他浏览器没有,所以要用(new XMLSerializer()).serializeToString(obj)方法来显示节点内容。
获得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);
xmlhttp.open("GET",url,true)里第一个参数表示请求的方式,“POST”或者“GET”;第二个参数是发送请求的地址;第三个参数是表示是否用异步方式进行请求。如果采用异步方式请求,那么浏览器会在send请求后等待请求地址的响应同时,继续执行send之后的语句,得到响应后执行xmlhttp.onreadystatechange设置的名为stateChange的回调方法,所以要把得到响应后的后继操作写在这个回调方法里。
需要注意的是如果采用同步方式发送请求,浏览器会等请求响应后才执行send之后的语句,所以最好是把响应后的操作直接写在send语句之后,而不是像异步方式请求那样写在xmlhttp.onreadystatechange设置的回调方法中,因为各浏览器在同步请求后是否还执行这个回调方法上还是有些不一致的地方:比如firefox3.0在发送同步请求得到响应后就不触发onreadystatechange事件,自然就不会执行这个回调方法了。
不同浏览器的XMLHttpRequest虽然接口一样,但在不同浏览器中调用XMLHttpRequest的方法和属性却不尽相同。如send方法,在IE中可以不传参数,如myXMLHttpRequest.send();仍然可以正常工作,而在firefox中,必须为send方法传一个参数,也就是说,在firefox中send方法参数没有默认值,必须为其赋值,哪怕是null也可以。