Область витдимости переменной...
Есть 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, время: 17:26. |