|
класс на 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(); |
|
28.02.2009, 13:27 | #2 | ||
|
Цитата:
Цитата:
|
||
|
Этот пользователь сказал спасибо deMone за это полезное сообщение: | Anthony (28.02.2009) |
28.02.2009, 18:03 | #3 | |
|
Цитата:
цикл уже закончится, а пост еще будет выполняться, причем брать всегда последний индекс цикла. Я так попробовл. Структура примерно такова: Код 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 возвращаю. Спасибо за советы
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запись в файл .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 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|