Javascript 实例化XMLHttpRequest对象的最佳方法

Javascript 实例化XMLHttpRequest对象的最佳方法,javascript,ajax,cross-browser,xmlhttprequest,Javascript,Ajax,Cross Browser,Xmlhttprequest,创建对象的最佳方法是什么 它应该适用于所有有能力的浏览器。使用(或类似的JavaScript库)。它负责处理跨浏览器兼容性问题,例如进行Ajax调用 ,使用: 这是一个有用的链接和一些代码(应该涵盖所有基础) var请求=null; 函数InitAJAX() { var objxml=null; var ProgID=[“Msxml2.XMLHTTP.6.0”、“Msxml2.XMLHTTP.3.0”、“Microsoft.XMLHTTP”]; 尝试 { objxml=newXMLHttpRe

创建对象的最佳方法是什么

它应该适用于所有有能力的浏览器。

使用(或类似的JavaScript库)。它负责处理跨浏览器兼容性问题,例如进行Ajax调用

,使用:


这是一个有用的链接和一些代码(应该涵盖所有基础)

var请求=null;
函数InitAJAX()
{
var objxml=null;
var ProgID=[“Msxml2.XMLHTTP.6.0”、“Msxml2.XMLHTTP.3.0”、“Microsoft.XMLHTTP”];
尝试
{
objxml=newXMLHttpRequest();
}
捕获(e)
{                
对于(变量i=0;i
使用任何JavaScript库都比编写自己的Ajax框架更可取,除非这是重点。如果您坚持自己编写,您可能想查看jQuery或[insert name here]框架,看看它们是如何做到的。

对于无库解决方案,您可以模拟Prototype使用的
Try。这些
相当容易:

function newAjax() {
    try { return new XMLHttpRequest();                    } catch(){}
    try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(){}
    try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(){}
    try { return new ActiveXObject('Msxml2.XMLHTTP');     } catch(){}
    try { return new ActiveXObject('Microsoft.XMLHTTP');  } catch(){}
    return false;
}

这是我使用的,它对我很好:

    function request()
    {
        try
        {
            try
            {
                return new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch( e )
            {
                return new ActiveXObject("Msxml2.XMLHTTP")
            }
        }
        catch(e) 
        {
            return new XMLHttpRequest()
        }
    }

我赞同Cletus对jQuery的建议,并查看了该插件,该插件功能强大且易于使用,可通过Ajax快速将表单转换为工作状态。

以某种方式使用和处理对象

我建议您为IE自己编写以下或编写一个不太复杂的小补丁:

if(typeof window.XMLHttpRequest === 'undefined' &&
    typeof window.ActiveXObject === 'function') {
    window.XMLHttpRequest = function() {
        try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {}
        try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {}
        return new ActiveXObject('Microsoft.XMLHTTP');
    };
}
那你就可以了

var req = new XMLHttpRequest;
甚至在IE

编辑2011-02-18:有关新选择的MSXML版本背后的基本原理,请参见…

函数CreateXmlHttpObj(){


}

干净、斯巴达。可能希望“记住”定位的版本,这样您就不必每次都遇到1-4个异常。@Bishiboosh-在Firefox中工作正常-链接很好,可以将对象作为附加信息进行修复,此主题也很有用:
if(typeof window.XMLHttpRequest === 'undefined' &&
    typeof window.ActiveXObject === 'function') {
    window.XMLHttpRequest = function() {
        try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {}
        try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {}
        return new ActiveXObject('Microsoft.XMLHTTP');
    };
}
var req = new XMLHttpRequest;
try {
    XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
    try {
        XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (oc) {
        XmlHttpObj = null;
    }
}
// if unable to create using IE specific code then try creating for Mozilla (FireFox) 
if (!XmlHttpObj && typeof XMLHttpRequest != "undefined") {
    XmlHttpObj = new XMLHttpRequest();
}