Кроссбраузерный 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, время: 00:44. |