Ajax-вызов. В чем разница между новым ActiveXObject («Msxml2.XMLHTTP») и новым ActiveXObject («Microsoft.XMLHTTP»)? - PullRequest
3 голосов
/ 22 октября 2010

Я надеюсь, что оба вызова объекта ссылаются на ActiveXObject.Но почему мы передаем два разных параметра для работы в IE.1. Msxml2.XMLHTTP и 2. Microsoft.XMLHTTP

Они оба одинаковые?Или они зависят от браузера (IE7 и IE8)?

Я использовал оба.Я не получил никакого исключения.Оба выглядят одинаково для меня.Я использую IE 8.

Ответы [ 2 ]

6 голосов
/ 22 октября 2010

Оба на самом деле устарели. Существуют различные версии почтенного объекта Microsoft ActiveX MSXML (я полагаю, что последней была версия 5.0 и поставлялась с некоторой версией Office.) Эти версии имеют незначительные различия в поведении и исправления ошибок, которые обычно не вступают в силу в сценариях AJAX .

Начиная с IE7, Microsoft поддерживала стандартизированный объект "XmlHttpRequest", принятый другими современными браузерами. См. http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx. Вы определенно должны использовать это, поскольку IE7 теперь является фактическим наименьшим общим знаменателем. IE6 был объявлен мертвым в большинстве крупных организаций, поэтому нет причин поддерживать старые Microsoft ProXID, специфичные для Microsoft.

И, конечно, в наши дни очень мало причин для того, чтобы бросать свои собственные вызовы AJAX, поскольку библиотеки, такие как jQuery и ASP.NET Ajax, делают это за вас, абстрагируя эти неясные особенности браузера. Я настоятельно рекомендую изучить одну из этих библиотек.

Джордан Ригер

1 голос
/ 10 июня 2011

jquery (как минимум 1.4.2) имеет проблему при вызове $ .ajax ().Это делает большую утечку памяти (как фонтан) код трагедии:

if ( window.ActiveXObject ) {
    jQuery.ajaxSettings.xhr = function() {
        if ( window.location.protocol !== "file:" ) {
            try {
                return new window.XMLHttpRequest();
            } catch(xhrError) {}
        }

        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(activeError) {}
    };
}

разрешение:

if ( window.ActiveXObject ) {
    jQuery.ajaxSettings.xhr = function() {
        if ( window.location.protocol !== "file:" ) {
            if ( window.ActiveXObject ) {
                try {
                    return new window.ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
            try {
                return new window.XMLHttpRequest();
            } catch(xhrError) {}
        }

        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(activeError) {}
    };
}
...