Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » HTML, CSS, JavaScript

класс на js - область видимости переменных

Обсуждение темы класс на js - область видимости переменных в разделе HTML, CSS, JavaScript, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; И вот снова я с JS Есть класс на js , напишу его упрощенно: Код HTML: function foo(){ arr = new Array(); i ...


Закрытая тема
 
Опции темы
Старый 28.02.2009, 02:56   #1
И вот снова я с JS

Есть класс на js, напишу его упрощенно:
Код HTML:
function foo(){
       arr = new Array();
       i = 0;
       this.showArr = function(){
            alert(arr.toString()); 
           //всегда будет пустой массив, почему-то сюда не сохраняется 
           //переданное значение
       }

       this.start = function(){
             i++;
             $.post(..., ... , function (data){
                    getValue = data;
                    // тут getValue имеет значение
                    arr[i] =  getValue;
             });
             // а тут getValue = undefined.
        }
}

obj = new foo();
obj.start();
obj.start();
obj.start();

obj.showArr();
Вопрос в области видимости переменной getValue. Как сделать так, чтобы эта переменная сохраняла изменения, сделанные внутри тела POST? И почему код после поста выполняется раньше, чем тело самого поста?
 
Старый 28.02.2009, 02:56
Ссылки
Старый 28.02.2009, 13:27   #2
Цитата:
Вопрос в области видимости переменной getValue. Как сделать так, чтобы эта переменная сохраняла изменения, сделанные внутри тела POST?
Используйте, например, window.getValue, который будет доступен для всего окна браузера.

Цитата:
И почему код после поста выполняется раньше, чем тело самого поста?
Потому что function … — это callback-функция. Она и должна отработать после того, как выполнится $.post и он вернёт результаты.
 
Этот пользователь сказал спасибо deMone за это полезное сообщение:
Anthony (28.02.2009)
Старый 28.02.2009, 18:03   #3
Цитата:
Сообщение от deMone Посмотреть сообщение
Потому что function … — это callback-функция. Она и должна отработать после того, как выполнится $.post и он вернёт результаты.
А как же тогда делать циклы с вложенным постом?
цикл уже закончится, а пост еще будет выполняться, причем брать всегда последний индекс цикла. Я так попробовл.

Структура примерно такова:

Код HTML:
for (i=0;i<10;i++){
    $.post(data){
          teg[i] = data; // тут у нас i будет всегда равняться 10.
    }
}
 
Старый 28.02.2009, 18:21   #4
Код:
$.post(data){
    teg[i] = data; // тут у нас i будет всегда равняться 10.
}
Это, вообще, что за бред?
 
Старый 28.02.2009, 18:38   #5
deMone, это примерная структура.
Могу подробнее написать:
Код HTML:
//arr - ранее полученный массив

for(i=0; i < arr.length; i++){
      //здесь i индексируется нормально - по единице
      $.post("address.php", { address: arr[i][1] }, function(data){
           alert(i); //а тут i все время  = 10.
           alert(arr[i][4]); 
      });
}
Если это бред, то в чем? - буду рад комментам.
 
Старый 28.02.2009, 19:14   #6
Бред был в вашем предыдущем коде, а здесь всё вполне логично. Любые переменные передаются и используются в JS по ссылке, а $.post работает асинхронно. Это означает, что сначала пройдут все N $.post-ов, которые увеличат i до 10, а потом запрашиваемые данные начнут приходить, и начнут запускаться callback-функции. Эти функции будут обращаться к i, которая к тому моменту будет равна 10.
 
Старый 28.02.2009, 19:21   #7
deMone, получается цикл только внутри поста можно использовать и передавать сначала в пост весь массив данных?
Неужели нет других вариантов? - например делать принудительную задержку на секунду в цикле - хотя не факт что пост быстрее отработается.
 
Старый 28.02.2009, 20:21   #8
А зачем такие ухищрения? Попробуйте что-нибудь вроде этого:
Код:
for(i=0; i < arr.length; i++) {
      $.post("address.php", { address: arr[i][1] }, "abc(data, " + i + ");");
}

function abc (data, index) {
    alert(index);
}
 
Старый 28.02.2009, 20:40   #9
deMone, я примерно так и сделал, только счетчик в пост передаю и в data возвращаю. Спасибо за советы
 
Старый 28.02.2009, 20:40
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл .htpasswd переменных на PHP Anatol ASP, Perl, PHP и MySQL 5 07.08.2007 08:33
Как вывести список всех переменных? chaynik ASP, Perl, PHP и MySQL 15 25.04.2006 22:43
Как сделать область для текста с возможностью форматирования? Necros HTML, CSS, JavaScript 5 15.12.2005 00:01
Класс MySQL для PHP PAB HTML, CSS, JavaScript 3 16.03.2005 02:24
Связь Js переменных с Php переменными b34st HTML, CSS, JavaScript 2 08.06.2004 09:38


Текущее время: 03:34. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум