Лучший метод создания объекта XMLHttpRequest - PullRequest
7 голосов
/ 06 января 2009

Каков наилучший способ создания XMLHttpRequest объекта?

Должно работать во всех браузерах.

Ответы [ 9 ]

11 голосов
/ 06 января 2009

Для решения без библиотек вы можете довольно легко эмулировать использование Prototype Try.these:

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;
}
9 голосов
/ 06 января 2009

Вот полезная ссылка и некоторый код (должен охватывать все базы)

http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx

        var request = null;

        function InitAJAX()
        {
            var objxml = null;
            var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];            

            try
            {
                objxml = new XMLHttpRequest();
            }
            catch(e)
            {                
                for (var i = 0; i < ProgID.length; i++)
                {
                    try
                    {
                        objxml = new ActiveXObject(ProgID[i]);
                    }
                    catch(e)
                    {                        
                        continue;
                    }
                }
            }

            return objxml;            
        }

        request = InitAJAX();
8 голосов
/ 06 января 2009

Я бы предложил выполнить совет Сергея или написать небольшой, менее сложный патч для 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.

edit 2011-02-18: см. в этом блоге для обоснования нового выбора версий MSXML ...

8 голосов
/ 06 января 2009

Используйте jQuery (или аналогичную библиотеку JavaScript). Он решает проблемы кросс-браузерной совместимости, такие как вызовы Ajax.

Например , используя jQuery Ajax call :

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});
3 голосов
/ 06 января 2009

Использование практически любой библиотеки JavaScript Ajax предпочтительнее написания вашей собственной платформы Ajax - если это не так. Возможно, вы захотите проверить структуру jQuery или Prototype или MooTools или Dojo или [вставить имя здесь], чтобы увидеть, как они это делают, если вы настаиваете на написании свой собственный.

1 голос
/ 06 января 2009
1 голос
/ 06 января 2009

Это то, что я использую, у меня работает нормально:

    function request()
    {
        try
        {
            try
            {
                return new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch( e )
            {
                return new ActiveXObject("Msxml2.XMLHTTP")
            }
        }
        catch(e) 
        {
            return new XMLHttpRequest()
        }
    }
0 голосов
/ 08 декабря 2010

функция CreateXmlHttpObj () {

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();
}

}

0 голосов
/ 06 января 2009

Я согласен с предложением Cletus о jQuery, а также проверяю плагин jQuery Form , очень мощный и простой в использовании для быстрого преобразования ваших форм в работу через Ajax.

...