Еще раз об ajax. Проблема с readyState и классом.

Бочонок

http://frontender.info
Еще раз об ajax. Проблема с readyState и классом.

Доброго времени суток.

Возникла следующая проблема:
Есть класс, занимающийся передачей и получением информации использующий AJAX технологию.
И все хорошо, только одна проблема.
Функция изменения стостояния вызывается в нормальном порядке.
Но как в функции state_listener получить exchanger.connector.readyState ?
Передать ссылку на обьект в параметрах не получится.
this тоже указывает явно куда то не туда...
Помогите разобратся - откуда в таком случае readyState брать ?


PHP:
function ajax(){
	this.init = function(){
		if(window.XMLHttpRequest){
			try{
			this.connector = new XMLHttpRequest;
			}catch(error){
			   alert(error);	
			   return;
			}
		}else if(window.ActiveXObject){
			try{
			this.connector = new ActiveXObject("Msxml2.XMLHTTP");
			}catch(error){
			   alert(error);	
			   return;
			}
		}
	}

	this.send = function(){
		this.connector.open('GET','\example.xml');
		this.connector.send(null);
		this.connector.onreadystatechange = state_listener;
	}

	state_listener = function(){
		alert(this.readyState); // undefined
                // Подскажите пожалуста, гле потерялся readyState ?
		switch(this.readyState){
			case 4:
				alert('Completed');
				if (connector.status == 200){
   					alert(this.responseXML.toString());
 				}
 				this.init();
				break;
		}
	}

}

var exchanger = new ajax();
exchanger.init();
exchanger.send();
 

FreeSpace

Чукча-читатель
По-моему ты его вообще не так ищешь.
Надо вот так:
PHP:
this.connector.onreadystatechange = function()
{
    alert(this.connector.readyState);
}
Edited: пардон, тут без временной переменной не обойтись.
PHP:
var http = this.connector;
this.connector.onreadystatechange = function()
{
    alert(http.readyState);
}
 

Бочонок

http://frontender.info
Ээээээ.... Как это не обойдешься ???!?!?
И внешнюю для чего ? Для класса ?

А если у меня 40 экземпляров этого класса, что тогда ?

Нужен однозначный иденитификатор, который бы позволял определимть какой экземпляр вызвал функцию.

Подскажите, как можно с этой проблемой справится.
С уважением. Бочонок.
 

denver

?>Скриптер
Кажись пропущен this.connector.readyState

-~{}~ 28.08.06 22:10:

Тьфуй.. FreeSpace тоже это сказал :)

-~{}~ 28.08.06 22:13:

Вобщем я гоню, а FreeSpace прав..
 

Бочонок

http://frontender.info
а как тогда выпутыватся в случае с кучей екземпляров ?
Нужно же знать какой именно вызвал функцию !

-~{}~ 29.08.06 02:23:

Собственно решение проблемы.
(да здравствует denver и его полезные ссылки !)

PHP:
...
this.connector.onreadystatechange = this.create_state_listener(this);
...
this.create_state_listener = function(obj){
		return function(){
		switch(obj.connector.readyState){
			case 0:
				alert('Uninitialised');
				break;
			case 1:
				alert('Loading');
				break;
			case 2:
				alert('Loaded');
				break;
			case 3:
				alert('Interactive');
				break;
			case 4:
				alert('Completed');
			alert(obj.connector.status);
				if (obj.connector.status == 200){
   					alert(obj.connector.responseXML.toString());
 				}
 				obj.init();
				break;
			}
		}
	}
 
Сверху