发布网友 发布时间: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