Кроссбраузерный XMLHttpRequest
var XMLHttpRequest = XMLHttpRequest || window.ActiveXObject && function() { return new ActiveXObject('Msxml2.XMLHTTP'); }; Теперь мы можем смело писать, например, синхронную загрузку станицы, работающую во всех браузерах var xhr = new XMLHttpRequest(); xhr.open('get', '/', false); xhr.send(null); alert(xhr.responseText); Или асинхронную var xhr = new XMLHttpRequest(); xhr.open('get', '/', true); (function() { if (xhr.readyState == 4) alert(xhr.responseText); else setTimeout(arguments.callee, 10); })(); xhr.send(null); |
Почему не Microsoft.XMLHTTP?
|
Да я не знаю точно, где какой. У меня в ИЕ6 оба работают. По хорошему нужно оба в try-catch завернуть.
|
Похоже каждый создает xhr-объект так, как ему хочется :D
jQuery 1.3.2 xhr:function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); }, MooTools 1.2.1 Browser.Request = function(){ return $try(function(){ return new XMLHttpRequest(); }, function(){ return new ActiveXObject('MSXML2.XMLHTTP'); }); }; Prototype 1.6.0.2 getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, Ext JS 2.2 activeX:[ 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ] Fleegixjs var t = [ 'Msxml2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'Microsoft.XMLHTTP' ]; JavaScriptMVC 1.5.2 MVC.Ajax.factory = function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();}; AJAX.OOP 1.0.4 this._transport = (new XMLHttpRequest() || new ActiveXObject('Msxml2.XMLHTTP') || new ActiveXObject('Microsoft.XMLHTTP') || null); June 1.1 var createXmlHttp = function() { ///<summary>Creates an XMLHttpRequest object.</summary> ///<returns type="Object" /> try { return new XMLHttpRequest(); } catch(ex){} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex){} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(ex) { return xmlHttpNotImplemented(); } return null; }; Midori (r80) try { this.request = new XMLHttpRequest() } catch (e) { try { this.request = new ActiveXObject('Msxml2.XMLHTTP') } catch (e) { this.request = new ActiveXObject('Microsoft.XMLHTTP') } } DOMAssistant 2.7.4 var XMLHttpMS = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; Dojo d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; |
Цитата:
Моя абстракция круче :) |
Мне такой вариант нравится:
if (!XMLHttpRequest) var XMLHttpRequest = function() { for (var progIDs = ['Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'], i = 0, length = progIDs.length; i < length; i++) try { return new ActiveXObject(progIDs[i]); } catch (err) {} return null; }; вроде работает. |
Цитата:
|
В MSDN вообще примеры с использованием MSXML2.XMLHTTP.3.0.
В вот на англоязычном форуме какой-то многозвездочный юзер A1ien51 отвечает: Цитата:
|
Вообще, мой вариант почти без изменений списан с MicrosoftAjaxLibrary. Уж они сами-то точно знают, что нужно для их браузера.
Вот их вариант (Microsoft.XMLHTTP вообще нет): if (!window.XMLHttpRequest) { window.XMLHttpRequest = function window$XMLHttpRequest() { var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ]; for (var i = 0, l = progIDs.length; i < l; i++) { try { return new ActiveXObject(progIDs[i]); } catch (ex) { } } return null; } } |
Цитата:
|
Часовой пояс GMT +3, время: 10:27. |