Кроссбраузерный 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; } } |
Цитата:
|
Судя по номерам версий, логичнее, конечно, использовать вариант от Riim. Всё таки в большинстве случаев новые версии прог лучше старых;)
|
B~Vladi, если номер версии не указан - берется версия по умолчанию
у меня например есть следующие версии (название/путь/typelib clsid) Msxml2.XMLHTTP.4.0 C:\WINDOWS\system32\msxml4.dll {F5078F18-C551-11D3-89B9-0000F81FE221} Msxml2.XMLHTTP.5.0 C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL {F5078F18-C551-11D3-89B9-0000F81FE221} Msxml2.XMLHTTP.6.0 C:\WINDOWS\system32\msxml6.dll {F5078F18-C551-11D3-89B9-0000F81FE221} Msxml2.XMLHTTP.2.6 %SystemRoot%\system32\msxml2.dll {f5078f18-c551-11d3-89b9-0000f81fe221} Msxml2.XMLHTTP.3.0 %SystemRoot%\system32\msxml3.dll {F5078F18-C551-11D3-89B9-0000F81FE221} Msxml2.XMLHTTP %SystemRoot%\system32\msxml3.dll {F5078F18-C551-11D3-89B9-0000F81FE221} Microsoft.XMLHTTP.1.0 %SystemRoot%\system32\msxml3.dll {D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E} Microsoft.XMLHTTP.1 %SystemRoot%\system32\msxml3.dll {D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E} Microsoft.XMLHTTP %SystemRoot%\system32\msxml3.dll {D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E} правда вопрос, где есть какие версии, остается |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 13:06. |