Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2009, 19:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Кроссбраузерный 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);

Последний раз редактировалось Kolyaj, 01.07.2009 в 20:02.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2009, 20:23
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Почему не Microsoft.XMLHTTP?
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2009, 20:39
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да я не знаю точно, где какой. У меня в ИЕ6 оба работают. По хорошему нужно оба в try-catch завернуть.
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2009, 21:38
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Похоже каждый создает xhr-объект так, как ему хочется

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'];
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2009, 21:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
'MSXML2.XMLHTTP.3.0'
'Msxml2.XMLHTTP.6.0'
"Msxml2.XMLHTTP.4.0"
Вот ведь, я и не знал такого

Моя абстракция круче
Ответить с цитированием
  #6 (permalink)  
Старый 02.07.2009, 00:44
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Мне такой вариант нравится:
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;
};


вроде работает.
Ответить с цитированием
  #7 (permalink)  
Старый 02.07.2009, 09:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Riim
'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'
Ну если кто-нибудь объяснит чем они отличаются и где работают/не работают, тогда можно и так
Ответить с цитированием
  #8 (permalink)  
Старый 02.07.2009, 11:21
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

В MSDN вообще примеры с использованием MSXML2.XMLHTTP.3.0.

В вот на англоязычном форуме какой-то многозвездочный юзер A1ien51 отвечает:
Сообщение от A1ien51
Сообщение от Wukfit
@eric Hi Eric I just wanted to clarify something with you, are you saying that legacy browser support (e.g. IE 5.x) requires the use of both MSXML2.XMLHTTP and Microsoft.XMLHTTP?

Cheers,
Wukfit
Only Microsoft.XMLHTTP is needed and is what I do now.

A good filter would be to use MSXML2 if you do not want the older browsers!

Now in the future browsers, if MS dumps the Microsoft namespace in IE8+, would we need to use the MSXML2 if we expect our site to be along that long? LOL

Eric
Ответить с цитированием
  #9 (permalink)  
Старый 02.07.2009, 14:51
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Вообще, мой вариант почти без изменений списан с 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;
    }
}
Ответить с цитированием
  #10 (permalink)  
Старый 02.07.2009, 14:54
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Riim
Уж они сами-то точно знают, что нужно для их браузера.
Хорошо, если так
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание и уничтожение XMLHttpRequest Vlas AJAX и COMET 9 22.05.2009 12:38
XMLHttpRequest серверная часть mmfStudent Серверные языки и технологии 7 14.04.2009 01:52
Повторное использовнаие XMLHttpRequest ViZ Общие вопросы Javascript 3 05.02.2009 13:11
XMLHTTPRequest и REadyState _Shasha_ AJAX и COMET 0 10.10.2008 09:00
XMLHTTPRequest POST метод gaolong Общие вопросы Javascript 7 30.06.2008 13:47