Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.04.2010, 20:09
Новичок на форуме
Отправить личное сообщение для ipevgeny Посмотреть профиль Найти все сообщения от ipevgeny
 
Регистрация: 28.10.2009
Сообщений: 5

Область витдимости переменной...
Есть ajax запрос. В результате его создается список элементов. Не могу понять как вне функции с запросом получить доступ у созданному списку...
function abc() {
	list = document.getElementById("users");// ul tag
	function loadPage(){
		var url = 'site.com';	
	    var initRequest = new XMLHttpRequest();
	    initRequest.open("POST", url, true);
	    initRequest.onreadystatechange = function(){
	        if (initRequest.readyState == 4) {
	            if (initRequest.status == 200) {
					for(var i=0; i<=10;i++) {
						list_item = document.createElement("li");
						list_item.innerHTML = initRequest.responseText;
						list.appendChild(list_item);
					}
	            }
	        }
	    };
	    initRequest.send(null);
	}
	loadPage();
	
	alert(list_item.length);//не видит list_item, т.к. он еще не создан.
	
}


Нужно, чтобы в alert были правильные данные.

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2010, 20:47
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

function abc() {
	list = document.getElementById("users");// ul tag
	var list_item;
	function loadPage(){
		var url = 'site.com';	
	    var initRequest = new XMLHttpRequest();
	    initRequest.open("POST", url, true);
	    initRequest.onreadystatechange = function(){
	        if (initRequest.readyState == 4) {
	            if (initRequest.status == 200) {
					for(var i=0; i<=10;i++) {
						list_item = document.createElement("li");
						list_item.innerHTML = initRequest.responseText;
						list.appendChild(list_item);
					}
	            }
	        }
	    };
	    initRequest.send(null);
	}
	loadPage();
	
	alert(list_item.length);//не видит list_item, т.к. он еще не создан.
	
}

Может так?!
Ответить с цитированием
  #3 (permalink)  
Старый 23.04.2010, 10:27
Новичок на форуме
Отправить личное сообщение для ipevgeny Посмотреть профиль Найти все сообщения от ipevgeny
 
Регистрация: 28.10.2009
Сообщений: 5

Я, вероятно, не правильно описал проблему)
Если я объявлю переменную в начале функции, то в alert будет ее изначальное значение(undefined), а нужно, чтобы был (object). т.е. результат создания списка...

function abc(){
	list = document.getElementById("users");// ul tag
	var list_item;
	var loadPage = (function(){
		var url = 'site.com';	
	    var initRequest = new XMLHttpRequest();
	    initRequest.open("POST", url, true);
	    initRequest.onreadystatechange = function(){
	        if (initRequest.readyState == 4) {
	            if (initRequest.status == 200) {
					for(var i=0; i<=10;i++) {
						list_item = document.createElement("li");
						list_item.innerHTML = initRequest.responseText;
						list.appendChild(list_item);
					}
					alert(typeof list_item);// а здесь покажет правильно:)
	            }
	        }
	    };
	    initRequest.send(null);
	}())
		
	
	alert(typeof list_item);//покажет undefined, а нужно, чтобы было object
}
Ответить с цитированием
  #4 (permalink)  
Старый 23.04.2010, 10:53
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

правильно! на момент вызова последнего алерта onreadystatechange не равно 4 и переменная не получила объект. А как событие сработает и нижний алерт будет object.

Событие не успевает сработать до вывода нижнего алерта.
__________________
.
Ответить с цитированием
  #5 (permalink)  
Старый 23.04.2010, 10:56
Новичок на форуме
Отправить личное сообщение для ipevgeny Посмотреть профиль Найти все сообщения от ipevgeny
 
Регистрация: 28.10.2009
Сообщений: 5

А можно как-нибудь передать какое-нибудь(например true) значение функцие "loadPage", когда onreadystatechange будет равен 4???
Тогда можно было бы сделать проверку после функции...
Ответить с цитированием
  #6 (permalink)  
Старый 23.04.2010, 11:00
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Вызывай её всё в том же обработчике события и всё.

function abc(){
	list = document.getElementById("users");// ul tag
	var list_item;
	var loadPage = (function(){
		var url = 'site.com';	
	    var initRequest = new XMLHttpRequest();
	    initRequest.open("POST", url, true);
	    initRequest.onreadystatechange = function(){
	        if (initRequest.readyState == 4) {
	            if (initRequest.status == 200) {
					for(var i=0; i<=10;i++) {
						list_item = document.createElement("li");
						list_item.innerHTML = initRequest.responseText;
						list.appendChild(list_item);
					}
						LoadPage(true);
	            }
	        }
	    };
	    initRequest.send(null);
	}())
}


Кстати твой код в IE не будет работать var initRequest = new XMLHttpRequest(); там нет такого объекта. Если ты конечно его сам до этого не создал.
__________________
.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Область видимости переменной. noumo Events/DOM/Window 3 03.12.2009 23:48
обратиться к элементу формы, заданному переменной Andrej_2 Элементы интерфейса 4 15.05.2009 09:18
ключи в ассоциативной переменной afandi Общие вопросы Javascript 4 05.02.2009 15:58
Объясните пожалуйста значение символов после переменной Анатолий Общие вопросы Javascript 1 09.01.2009 03:50
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25