Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.08.2009, 18:21
dmk777 вне форума Посмотреть профиль Отправить личное сообщение для dmk777 Найти все сообщения от dmk777
  № 1  
Ответить с цитированием
dmk777

Регистрация: Aug 2006
Сообщений: 10
Отправить сообщение для dmk777 с помощью ICQ
По умолчанию Как передать массив из вложенной функции?

Привет!

Нужно передать данные из функции в массив. Помогите разобраться.
Сильно не мните, в ActionScript всего неделю
Переменные s1,s2,s3 не присваиваются значения. Подскажите как лучше сделать.
Пожалуйста для ActionScript 2.0.

Вот код:
Код AS1/AS2:
function ReadPHP(news_number):Array {
// Загружаем данные из PHP
var sv:LoadVars = new LoadVars();
var rv:LoadVars = new LoadVars();
var s1:String = "";
var s2:String = "";
var s3:String = "";
 
rv.onLoad = dataLoad;
sv.sendAndLoad("http://www.eg.ru/read_top5.php?number=" + news_number, rv, "POST");
//trace("read_top5.php?number=" + news_number);
function dataLoad(done:Boolean) {
	if (done) {
		//trace(rv.my_title);
		//trace(rv.short_story);
 
        s1 = rv.my_title;//Header
		s2 = rv.short_story;//Short story
        s3 = rv.category;//Category
		Trace(s1);
		Trace(s2);
		Trace(s3);
	}
};
var ar:Array = new Array();
    ar.push(s1);//Header
	ar.push(s2);//Short story
	ar.push(s3);//Category
	Trace("Внешние переменные: " + ar);
return ar;
};//ReadPHP
 
//Загружаем новости
//MyArr = new Array(3);
 
var Arr:Array = new Array();
Arr = ReadPHP(0);
news_header_01 = Arr[0];
news_short_story_01 = Arr[1];
news_category_01 = Arr[2];
Добавлено через 1 минуту
PHP обрабатывает все нормально. Данные проходят.

Старый 02.08.2009, 18:36
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Заполнение массива и его возврат поставьте внутрь функции dataLoad, иначе элементы массива останутся неопределенными. (Код AS работает асинхронно, у вас к моменту заполнения массива переменные s1 и прочие еще не определены). И массив объявите пораньше, например, в начале функции.

Добавлено через 11 минут
Код AS1/AS2:
function ReadPHP(news_number):Array {
// Загружаем данные из PHP
var sv:LoadVars = new LoadVars();
var rv:LoadVars = new LoadVars();
s1 = "";
s2  = "";
s3 = "";
ar  = new Array();
 
rv.onLoad = dataLoad;
sv.sendAndLoad('http://www.eg.ru/read_top5.php?number=' + news_number, rv, 'POST');
//trace('read_top5.php?number=' + news_number);
function dataLoad(done:Boolean) {
        if (done) {
		//trace(rv.my_title);
		//trace(rv.short_story);
 
        s1 = rv.my_title;//Header
        s2 = rv.short_story;//Short story
        s3 = rv.category;//Category
        ar.push(s1);//Header
        ar.push(s2);//Short story
        ar.push(s3);//Category
        return ar;
       }
}
 
 
}//ReadPHP
 
//Загружаем новости
//MyArr = new Array(3);
 
var Arr:Array = new Array();
Arr = ReadPHP(0);
news_header_01 = Arr[0];
news_short_story_01 = Arr[1];
news_category_01 = Arr[2];
Если что, то имейте ввиду - переменные, объявленные внутри функции с использованием var, видны только в ней и умирают после ее отработки.
Добавлено через 28 минут
И если уж по мелочам, то точки с запятыми в конце функций не нужны, так они объявляются явно, и не анонимные, через ссылку, как тут:
Код AS1/AS2:
rv.onLoad = dataLoad;


Последний раз редактировалось mooncar; 02.08.2009 в 19:06.
Старый 02.08.2009, 19:07
dmk777 вне форума Посмотреть профиль Отправить личное сообщение для dmk777 Найти все сообщения от dmk777
  № 3  
Ответить с цитированием
dmk777

Регистрация: Aug 2006
Сообщений: 10
Отправить сообщение для dmk777 с помощью ICQ
Внутри функции dataLoad все видно, только после выхода из нее в массиве AR все значения undefined

Добавлено через 4 минуты
>И если уж по мелочам, то точки с запятыми в конце функций не нужны
Сорри, привычка из Pascal

Старый 02.08.2009, 19:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Поставьте внутрь блока с if (done) {
Код AS1/AS2:
  s1 = rv.my_title;//Header
        s2 = rv.short_story;//Short story
        s3 = rv.category;//Category
        ar:Array = new Array();
        ar.push(s1);//Header
        ar.push(s2);//Short story
        ar.push(s3);//Category
        return ar;

Старый 02.08.2009, 19:22
dmk777 вне форума Посмотреть профиль Отправить личное сообщение для dmk777 Найти все сообщения от dmk777
  № 5  
Ответить с цитированием
dmk777

Регистрация: Aug 2006
Сообщений: 10
Отправить сообщение для dmk777 с помощью ICQ
Не работает. Видно только внутри функции dataLoad. При выходе опять undefined

Старый 02.08.2009, 19:23
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от dmk777 Посмотреть сообщение
Сорри, привычка из Pascal
Это ерунда, главное массив заполняйте внутри dataLoad... а вот как с возвратом быть.. тут я поторопился.

Старый 03.08.2009, 13:04
dmk777 вне форума Посмотреть профиль Отправить личное сообщение для dmk777 Найти все сообщения от dmk777
  № 7  
Ответить с цитированием
dmk777

Регистрация: Aug 2006
Сообщений: 10
Отправить сообщение для dmk777 с помощью ICQ
Интересная вложенная функция. Даже глобальные переменные после выхода из нее становятся неопределенными. Почти целая ночь гугления ничего не дала. Встречал слабопохожие варианты, но там говорили табу.
В общем сделал внутри нее вызов в 3-ю функцию и тогда все заработало. Спасибо за участие :-)


Последний раз редактировалось dmk777; 03.08.2009 в 13:07.
Старый 03.08.2009, 17:44
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 8  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Хорошо.Конечно же, можно было бы и по другому организовать, но на самом деле задачка, как мне кажется, имеет решение. Эх опыт, сын ошибок трудных...

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.