Область витдимости переменной...
Есть 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 были правильные данные. Спасибо |
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, т.к. он еще не создан. } Может так?! |
Я, вероятно, не правильно описал проблему)
Если я объявлю переменную в начале функции, то в 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 } |
правильно! на момент вызова последнего алерта onreadystatechange не равно 4 и переменная не получила объект. А как событие сработает и нижний алерт будет object.
Событие не успевает сработать до вывода нижнего алерта. |
А можно как-нибудь передать какое-нибудь(например true) значение функцие "loadPage", когда onreadystatechange будет равен 4???
Тогда можно было бы сделать проверку после функции... |
Вызывай её всё в том же обработчике события и всё.
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(); там нет такого объекта. Если ты конечно его сам до этого не создал. |
Часовой пояс GMT +3, время: 22:21. |