问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ActiveXObject() XMLHttpRequest()这两个对象有什么差别 ?分别在什么...

发布网友 发布时间:2022-04-30 13:11

我来回答

2个回答

懂视网 时间:2022-04-23 22:58

XMLHttpRequest/ActiveXObject异步加载

在同一个文件夹下面创建一个function5.html,代码如下:

<html>
<head>
 <title></title>
 <script type="text/javascript">
 function init()
 {
 //加载package.js文件,设置script的id为yy
 ajaxPage("yy","package.js");
 //此方法为package.js里面的方法,此处执行方法成功
 functionOne();
 }
 function ajaxPage(sId,url)
 {
 var oXmlHttp = getHttpRequest();
 oXmlHttp.onreadystatechange = function()
 {
 //4代表数据发送完毕
 if ( oXmlHttp.readyState == 4 )
 {
  //0为访问的本地,200代表访问服务器成功,304代表没做修改访问的是缓存
  if(oXmlHttp.status == 200 || oXmlHttp.status == 0 || oXmlHttp.status == 304)
  {
  includeJS(sId,oXmlHttp.responseText);
  }
  else
  {
  }
 }
 }
 oXmlHttp.open("GET",url,true);
 oXmlHttp.send(null);
 }
 function getHttpRequest()
 {
 if(window.ActiveXObject)//IE
 {
 return new ActiveXObject("MsXml2.XmlHttp");
 }
 else if(window.XMLHttpRequest)//其他
 {
 return new XMLHttpRequest();
 }
 }
 function includeJS(sId,source)
 {
 if((source != null)&&(!document.getElementById(sId)))
 {
 var myHead = document.getElementsByTagName("HEAD").item(0);
 var myScript = document.createElement( "script" );
 myScript.language = "javascript";
 myScript.type = "text/javascript";
 myScript.id = sId;
 try{
  myScript.appendChild(document.createTextNode(source));
 }
 catch (ex){
  myScript.text = source;
 }
 myHead.appendChild( myScript );
 }
 }
 </script>
</head>
<body>
 <input type="button" value="测试按钮" onclick="init()"/>
</body>
</html>

ActiveXObject只有IE里面才有,其他浏览器大部分支持XMLHttpRequest,通过此办法我们可以实现动态加载脚本了,不过是异步加载,也没法运行functionOne,第二次就可以运行了,但是可惜的是在IE、Firefox、Safari下可以运行,在Opera、Chrome下会出错,不过只要发布之后在Chrome和Opera下就不会出现错误了。

其实这里把open里面设置为false就是同步加载了,同步加载不需要设置onreadystatechange事件。

XMLHttpRequest/ActiveXObject同步加载

在这里我把一些情况考虑在内,写成了一个方法,封装为loadJS.js,方便以后直接调用,代码如下:

/**
 * 同步加载js脚本
 * @param id 需要设置的<script>标签的id
 * @param url js文件的相对路径或绝对路径
 * @return {Boolean} 返回是否加载成功,true代表成功,false代表失败
 */
function loadJS(id,url){
 var xmlHttp = null;
 if(window.ActiveXObject)//IE
 {
 try {
 //IE6以及以后版本中可以使用
 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
 }
 catch (e) {
 //IE5.5以及以后版本可以使用
 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
 }
 }
 else if(window.XMLHttpRequest)//Firefox,Opera 8.0+,Safari,Chrome
 {
 xmlHttp = new XMLHttpRequest();
 }
 //采用同步加载
 xmlHttp.open("GET",url,false);
 //发送同步请求,如果浏览器为Chrome或Opera,必须发布后才能运行,不然会报错
 xmlHttp.send(null);
 //4代表数据发送完毕
 if ( xmlHttp.readyState == 4 )
 {
 //0为访问的本地,200到300代表访问服务器成功,304代表没做修改访问的是缓存
 if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304)
 {
 var myHead = document.getElementsByTagName("HEAD").item(0);
 var myScript = document.createElement( "script" );
 myScript.language = "javascript";
 myScript.type = "text/javascript";
 myScript.id = id;
 try{
 //IE8以及以下不支持这种方式,需要通过text属性来设置
 myScript.appendChild(document.createTextNode(xmlHttp.responseText));
 }
 catch (ex){
 myScript.text = xmlHttp.responseText;
 }
 myHead.appendChild( myScript );
 return true;
 }
 else
 {
 return false;
 }
 }
 else
 {
 return false;
 }
}

此处考虑到了浏览器的兼容性以及当为Chrome、Opera时必须是发布,注释还是写的比较清楚的,以后需要加载某个js文件时,只需要一句话就行了,如loadJS("myJS","package.js")。方便实用。

热心网友 时间:2022-04-23 20:06

这两者是在不同浏览器上使用的,具体用法上差别很小(实际上,要尽量避免用到有差别的地方)。

IE里面:
new ActiveXObject("Msxml2.XMLHTTP")
new ActiveXObject("Microsoft.XMLHTTP")

Mozilla和Safari里面:
new XMLHttpRequest()
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
问一卡通网上转账还款问题 招行一卡通可以通过网银转账到招行存折吗 美菱洗衣机e3是什么故障 美菱洗衣机显示圆圈锁是什么意思? 鲁迅的老家在哪里 鲁迅老家是哪里呀 什么是小额贴息贷款 我是05年申请姐妹纸移民美国的,请问几年排到 电脑哪个键输网址符号的请问电脑输入网址时怎么输入4747符号 电脑怎么设置使用http11怎么把自己的电脑设置成Http代理服务器_百度知 ... xmlhttprequest是类还是对象 常见Web前端技术之间的关系,你了解多少 比较HTTP和XMLHttpRequest的异同 NEW XMLHTTP 和NEW XMLHTTPREQUEST有什么区别?分别什么时候用?XMLHTTP... ajax中的xmlhttp.responseText对象是什么意思? ajax中的xmlhttp.responseText对象是什么意思?他的返回值是1或者0吗... C#的 xmlhttp 是干什么的?有什么作用? 什么是xmlHttprequest对象有何作用,写出创建的代码 各国的首都分别是什么什么什 洪都拉斯在那里 请问洪都拉斯是属于哪个国家? 洪都拉斯是哪个洲? qq账号被盗密保手机号被改了,找腾讯客服验证都没通过,要如何找回,可给钱? qq被盗怎么办怎么找回,密保被改而且验证还说不对 用支付宝花呗扫拉卡拉二维码是不是第二天到账? 急急急,支付宝付款二维码成功后显示待到账,现在24小时过去了为什么还没到对方的账户上? 支付宝二维码支付是不是当时就能收到的 支付宝付款二维码成功后显示待到账,现在超过24小时还会到对方账户吗? 请问下:工程监理是戴蓝帽子的还是戴红帽子? 已经让别人买好的火车票但自己想改签下怎么办 XMLHttprequest对象的建立? 如何通过使用 XMLHTTP 或 ServerXMLHTTP 对象提交窗体数据 Microsoft.XMLHTTP的使用步骤 疑问MSXML2.XMLHTTP和msxml2.serverXMLHTTP.5.0的区别 腾讯视屏怎么用手机不上电脑登录 韭菜鸡蛋粉条如何做包子才会好吃 韭菜鸡蛋粉丝素包子怎么做好吃,韭菜鸡蛋粉 苹果手机拨打什么号码可以查贴膜 如何判断iphone7有没贴膜 苹果的手机怎样才可以看出来贴膜了 怎么看苹果6 plus有没有贴贴膜? 我电脑win10系统的,换系统后激活码忘掉了,现在用不了了,激活码XXXXX-XXXXX-XXXXX-XXXXX-2YT43? YT2129682546537帮我查一下这个快递? 亚太YT8合法吗? 康佳LED48F3700NF电视软件号99011995的升级包 运单号:YT2 112 794 338 782到哪里啦? 亚太YT8关闭了是因为什么? YT910994982580这个快递查不到呢0? 求一个win7家庭普通版升级到旗舰版的密钥,最新的 第一次和女生接吻,我是第一次,就和她舌吻,不知道她是不是初吻啊?