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

如何正确地创建XMLHttpRequest对象

发布网友 发布时间:2022-04-23 14:49

我来回答

2个回答

懂视网 时间:2022-04-23 19:10


要使用XHR对象,需要编写一个函数。

方法一:

优点简洁,在大部分IE版本上都能运行,但是没有版本检测,不知道低版本的情况还行不行。

var http_request; 
function creatXHR(){
  if(window.ActiveXObject){
  http_request=new ActiveXObject("Microsoft.XMLHTTP");
  }else{
  http_request=new XMLHttpRequest();
  }
}

方法二

来自书《JavaScript高级程序设计(第3版)》
首先检测原生XHR对象是否存在,如果存在就返回它的新实例。如果不存在就检测ActiveX对象。如果两种都不存在,就抛出错误。
关注if (typeof arguments.callee.activeXString != "string")这一句,如果有以前缓存的activeXString对象,下一次就不会执行if里面的东西。通过数组和for循环创建,很清晰,很严谨。
function createXHR() {
 if (typeof XMLHttpRequest != "undefined") {  
 return new XMLHttpRequest(); //IE7+和其他浏览器支持的
 } else if (typeof ActiveXObject != "undefined") { //IE7-支持的
  **if (typeof arguments.callee.activeXString != "string")** {  
  var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
   i, len;  
   for (i = 0, len = versions.length; i < len; i++) {   
   try {   
   new ActiveXObject(versions[i]);   
   arguments.callee.activeXString = versions[i];   
   break;
   } catch (e) {   //跳过
   }
  }
  }  return new ActiveXObject(arguments.callee.activeXString); //返回ActiveXObject对象
 } else { //全部不支持,抛出错误
  throw new Error("No XHR object available!");
 }
 } var XHR = createXHR();

方法三

网上看见的方法,考虑惰性函数的优点,一次检测之后重写构造方法。
在方法二的基础上加入惰性函数,构成方法三。

 **惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。**

 哇!觉得惰性函数是真的好玩!
function createXHR() {
 if (typeof XMLHttpRequest != "undefined") {  //在第一次执行的时候重写createXHR函数
  createXHR = function() {
  return new XMLHttpRequest();
  };

 } else if (typeof ActiveXObject != "undefined") {

  createXHR = function() {
  if (arguments.callee.activeXString != "string") {   
  var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
   i, len;   
   for (i = 0, len = versions.length; i < len; i++) {   
   try {    
   new ActiveXObject(versions[i]);    
   arguments.callee.activeXString = versions[i];    
   break;
   } catch (ex) {    //跳过
   }
   }

  }  
  return new ActiveXObject(arguments.callee.activeXString);
  };

 } else {

  createXHR = function() {
  throw new Error("No XHR object available.");
  };

 } 
 return createXHR();
 } 
 var XHR = createXHR();

热心网友 时间:2022-04-23 16:18

不同的浏览器创建XMLHttpRequst对象的方法是有差异的。IE浏览器使用ActiveObject,而其它的浏览器使用名为XMLHttpRequest内建对象。function CreateXmlHttpRequest() {var xmlHttp = null;try{// Firefox, Opera 8.0+, SafarixmlHttp=new XMLHttpRequest();}catch (e){// Internet Explorertry{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch (e){try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch (e){alert("您的浏览器不支持AJAX!");}}}}首先声明一个保存 XMLHttpRequest 对象的 xmlHttp 变量。然后使用 XMLHttp=new XMLHttpRequest() 来创建此对象。这条语句针对 Firefox、Opera 以及 Safari 浏览器。假如失败,则尝试针对 Internet Explorer6.0+ 的 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"),假如也不成功,则尝试针对 Internet Explorer 5.5+ 的 xmlHttp=new ActiveXObject
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 人保寿险薪资待遇如何 三替搬家的箱车高度能放下1米8冰箱吗? vivox5手机连不上WiFi了 山东省养老金缴费15年,今天7月份&#xF4AA;退休能领多少钱? 养老保险金交够十五年后山东省跟江苏省徐州市退休后领取养老金多少? 不知道密码能否从银行卡里取出钱? 山东自由职业者参加养老保险交满15年能领多少养老金 1米8高的门能进1米85高的冰箱吗? 湿衣服晒在房间里蟑螂会怕吗? 我住在大理古镇,请问大理洱海双廊怎么玩 大理双廊两日行求攻略,玩过丽江后大理古城还值得去吗?如果单独双廊两日该怎么安排?谢谢。 股份公司设立申请的条件 股份有限公司设立需要哪些程序 谁能告诉我冬季恋歌里的《放不下的爱》的歌词 股份有限公司设立登记需准备哪些文件? 急求韩剧《冬日恋歌》里面的所有歌和曲?详细一点 冬季恋歌惟真拿着酒瓶唱的是哪首歌 XMLHttpRequest对象有几个返回状态值? 多大小孩可以用安抚奶嘴 经常喝黑米粥,可以健脾益胃吗? 闪银奇异没有苹果版本的app吗 闪银奇异app没有电脑版本的吗 在深圳即将辞职,因为工作使用的是微信,请问有哪些实名认证的东西要解绑? 公司要收回我自己注册的用于工作(实名认证、银行卡绑定了)我怎么把关于自己信息的东西弄掉? 和企业微信绑定了,我想解绑换另一个,怎样解除先前绑定的?_百度问一问 找一张卡通图片,带着一顶草莓形状的帽子,粉色长头发女孩儿 请问为什么要研究金融市场 请归纳3到5点 谢谢~ 金融学这三个研究方向1.货币银行与国际金融2.资本市场与公司金融3金融工程与风险管理有什么区别呀?. XMLHttpRequest对象请求响应 皮蛋内脂豆腐凉拌的做法 死面饼怎么做松软? 怎样烙死面饼软乎 烙死面饼怎么能烙的好吃又软呢?为什么我烙的饼不起鼓呢!希望得到大家的帮助,很着急。 高中生如何有效的做笔记 如何做好高中生物课堂笔记 高中英语如何做课堂笔记 找个小老虎头像要好看的 为什么ST股票涨停不超过5%? tt语音不出老虎印记咋回事 贷款面签需要注意什么