Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2014, 20:25
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

XmlHttpRequest недоступен для записи в IE?
Всем привет!
Столкнулся с небольшой проблемой. Использую обработчик событий отсюда.
Все хорошо работает, но... как всегда отличился IE.
Обработчик событий добавляет в XmlHttpRequest новый объект, в котором сидит функция обработчик. Вот скрин для наглядности:

Однако ишаки ничего не добавляют и, естественно, ниче не работает. Это что получается, XmlHttpRequest в ишаках доступен только для чтения?

Последний раз редактировалось Hapson, 02.03.2014 в 20:50.
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2014, 23:11
Аватар для kotamirov
Аспирант
Отправить личное сообщение для kotamirov Посмотреть профиль Найти все сообщения от kotamirov
 
Регистрация: 28.02.2014
Сообщений: 45

var request;
04
    if(window.XMLHttpRequest){
05
    request = new XMLHttpRequest();
06
    }else if(window.ActiveXObject){
07
      request = new ActiveXObject("Microsoft.XMLHTTP"); 
08
        }else{
09
        return;
10
        }


Вот так делай !
Ответить с цитированием
  #3 (permalink)  
Старый 03.03.2014, 01:05
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kotamirov
Вот так делай !
зачем??
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 03.03.2014, 11:55
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

kotamirov,
Вообще не о том...
Вот так у меня он добывется:
function getXmlHttp(){
  var xmlhttp;
  try{
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  }catch(e){
    try{
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(E){
      xmlhttp = false;
    }
  }
  if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
Ответить с цитированием
  #5 (permalink)  
Старый 03.03.2014, 12:03
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Вот полный код библиотеки обработчика:
EventHandler = (function(){
	var guid = 0;
	
	function fixEvent(event){
		event = event || window.event;
		if (event.isFixed){
			return event;
		}
		event.isFixed = true;
		event.preventDefault = event.preventDefault || function(){this.returnValue = false};
		event.stopPropagation = event.stopPropagaton || function(){this.cancelBubble = true};
		if(!event.target){
			event.target = event.srcElement;
		}
		if(!event.relatedTarget && event.fromElement){
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
		}
		if(event.pageX == null && event.clientX != null){
			var html = document.documentElement, body = document.body;
			event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
			event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
		}
		if (!event.which && event.button){
			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
		}
		return event;
	}
	
	/* Вызывается в контексте элемента всегда this = element */
	function commonHandle(event){
		event = fixEvent(event);
		var handlers = this.events[event.type]
		for(var g in handlers){
			var handler = handlers[g];
			var ret = handler.call(this, event);
			if (ret === false){
				event.preventDefault();
				event.stopPropagation();
			}
		}
	}
  
	return {
		add: function(elem, type, handler){
			if(typeof elem == "undefined"){return;}
			if(elem.setInterval && (elem != window && !elem.frameElement)){
				elem = window;
			}
			if(!handler.guid){
				handler.guid = ++guid;
			}
			if (!elem.events){
                                // вот здесь ни один IE ничего не добавляет
				elem.events = {};
                                // дальше тоже
				elem.handle = function(event){
					if(typeof EventHandler !== "undefined"){
						return commonHandle.call(elem, event);
					}
				};
			}
			if (!elem.events[type]){
				elem.events[type] = {};
				if (elem.addEventListener){
					elem.addEventListener(type, elem.handle, false);
				}else if(elem.attachEvent){
					elem.attachEvent("on" + type, elem.handle);
				}
			}
			elem.events[type][handler.guid] = handler;
		},
		
		remove: function(elem, type, handler){
			var handlers = elem.events && elem.events[type];
			if(!handlers || (handlers[handler.guid] != handler)){return;}
			delete handlers[handler.guid];
			for(var any in handlers){return;}
			if(elem.removeEventListener){
				elem.removeEventListener(type, elem.handle, false);
			}else if(elem.detachEvent){
				elem.detachEvent("on" + type, elem.handle);
			}
			delete elem.events[type];
			for(var any in elem.events){return;}
			try{
				delete elem.handle;
				delete elem.events;
			}catch(e){ // IE
				elem.removeAttribute("handle");
				elem.removeAttribute("events");
			}
		} 
	}
}())


Собственно проблему решил - просто сразу присваивал функцию на onreadystatechange. Ну можно еще readystate проверять по таймауту.
Но все же интересно почему ишаки так себя ведут
Ответить с цитированием
  #6 (permalink)  
Старый 03.03.2014, 18:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Теперь понятно. Крайне неудачная реализация EventHandler. Нельзя ничего писать в объекты. Да и не требуется оно.

Сообщение от Hapson
Вот так у меня он добывется:
Это нужно только для IE6-7, на которые все дружно забили уже давно.
В IE8 уже есть нормальный (почти) XMLHttpRequest
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрос на другой сайт XMLHttpRequest vscorpion Internet Explorer 9 24.12.2013 16:46
Формирование номера записи в бд Mafa Серверные языки и технологии 7 27.09.2013 11:21
Модуль для web-to-print проекта Anton2507 Работа 0 29.07.2012 11:35
добавление стилей для множества элементов ??? Общие вопросы Javascript 7 14.06.2012 01:50