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

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

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

Регистрация: Jun 2010
Сообщений: 128
По умолчанию LoadVars синхронная загрузка

Здравствуйте.
Проблема следующая: есть несколько текстовых файлов, переменные из которых синхронно, по setInterval, будут грузиться во флэш. Дальнейший код должен выполняться только после успешной загрузки ВСЕХ файлов. Как это лучше реализовать?
Пока идея только одна - сделать загрузку в цикле while, который просто не пустит дальше (будет бесконечно выполняться), пока не загрузится предыдущий файл. И функцию .onLoad писать для последнего в списке.
Какие еще могут быть варианты?
Заранее спасибо за любой совет.

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Самый простой и очевидный способ - воспользоваться методами класса и счетчиком.
Код AS1/AS2:
var loadCount:Number = 0; //начальное состояние счетчика загрузок
var loadTotal:Number = 2; //сколько должно быть загружено всего
 
var lv1:LoadVars = new LoadVars();
var lv2:LoadVars = new LoadVars();
lv1.onLoad = lvLoad1;
lv2.onLoad = lvLoad2;
lv1.load('file1.txt');
lv2.load('file2.txt');
 
function lvLoad1(suc:Boolean) 
{
	if (suc)
	{
		//действия по получению данных
 
		loadCount++; //при каждой удачной загрузке увеличиваем счетчик на 1
		if (loadCount == loadTotal) nextActions(); //и проверяем на завершенность всех загрузок
	}
}
 
function lvLoad2(suc:Boolean) 
{
	if (suc)
	{
		//действия по получению данных
 
		loadCount++;
		if (loadCount == loadTotal) nextActions();
	}
}
 
function nextActions () 
{
	//дальнейшие действия
}
Ну или использовать один экземпляр LoadVars и один обработчик, если возможно.

PS. Простите, но что вы подразумеваете под "синхронно, по setInterval" ?
Синхронно - это что с чем синхронизировано? Просто загрузка файла всегда асинхронна по отношению к работе кода, для того и обработчики событий загрузки введены...
__________________
Идите первым!


Последний раз редактировалось mooncar; 16.09.2011 в 17:43.
Старый 17.09.2011, 12:07
varialss вне форума Посмотреть профиль Отправить личное сообщение для varialss Найти все сообщения от varialss
  № 3  
Ответить с цитированием
varialss

Регистрация: Sep 2011
Сообщений: 3
Немного не в тему. Не могу создать новую ветку

Привет всем. AS2 мучаю.
Код AS1/AS2:
var vars:LoadVars = new LoadVars();
var datavar:LoadVars = new LoadVars();
vars.sendAndLoad('/test.swf'+f, datavar, "POST");
datavar.onData = function(source){
 datavar.decode(source);
//_root.s=datavar.ssylka;
//var s='ttt';
 _global.s=datavar.ssylka;
//_root.s='test';
}
trace(s);
как мне вытащить переменную s?

Старый 18.09.2011, 19:22
Зубило вне форума Посмотреть профиль Отправить личное сообщение для Зубило Найти все сообщения от Зубило
  № 4  
Ответить с цитированием
Зубило
[+1.3 24.09.11]

Регистрация: May 2010
Сообщений: 84
слушай этого чувака он дело говорит!

Старый 19.09.2011, 13:40
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 5  
Ответить с цитированием
Sergey_A

Регистрация: Jun 2010
Сообщений: 128
Спасибо, просто и красиво, то что надо.

Старый 22.11.2011, 12:57
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 6  
Ответить с цитированием
Sergey_A

Регистрация: Jun 2010
Сообщений: 128
Цитата:
Сообщение от mooncar Посмотреть сообщение
Ну или использовать один экземпляр LoadVars и один обработчик, если возможно.
Извините, а можно про это подробнее? А то количество файлов, которые надо загрузить в один ролик, растет в геометрической прогрессии - пока было 4, еще ничего, но уже надо 16, а в перспективе - 32. Я правильно понимаю, что надо использовать что-то типа конструкции
Код AS1/AS2:
lv1.onLoad = 
lv2.onLoad = lvLoad(this._name);
Еще раз спасибо.

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
количество файлов, которые надо загрузить в один ролик, растет в геометрической прогрессии - пока было 4, еще ничего, но уже надо 16, а в перспективе - 32
Почему сложилась такая ситуация?
Может быть, можно все переменные в одном файле хранить и грузить его единожды?

Старый 22.11.2011, 14:16
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 8  
Ответить с цитированием
Sergey_A

Регистрация: Jun 2010
Сообщений: 128
Вообще это данные с датчиков, информация с каждого датчика пишется в отдельный файл, и исправить ситуацию, по крайней мере, своими силами, невозможно. А на странице должны отображаться, скажем, температура на объекте, сила тока, напряжение и т. д. для установки, или даже для нескольких однотипных установок, и все это - на выбранный момент времени. А начиналось все как "простенькая флэшка типа работает аппарат - не работает". В общем - ховайся.

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ну можно вот так попробовать. Все же несколько экземпляров LoadVars, но сам обработчик один.
PS. Тестил с удаленным расположением файлов на серваке, все ок, по крайней мере с 3-мя файлами.

Код AS1/AS2:
var rlv:Array = new Array(); //массив для экземпляров LoadVars
 
var loadCount:Number ; //счетчик загрузок
var loadTotal:Number = 3; //сколько файлов должно быть загружено всего
 
for (i = 1; i <= loadTotal; i++) 
{
	rlv[i] = new LoadVars();	
	rlv[i].onLoad = lvLoaded;
}
 
 
var loadData:Number = setInterval(loadTxt, 3000);
 
function loadTxt () 
{
	trace('=== ЗАПРОС ДАННЫХ ===');
	loadCount = 0; //принудительно сбрасываем счетчик
 
	for (i = 1; i <= loadTotal; i++) 
	{
		trace('Загрузка ' + i + '-го файла');
		rlv[i].id = i; //запоминаем номер экземпляра LV в самом экземпляре
		rlv[i].load('file' + i +'.txt');
	}
}
 
 
function lvLoaded(suc:Boolean) 
{	
	if (suc)
	{
             	trace('загрузили очередной файл...парсим данные...');
 
		loadCount++; 
 
		var id:Number = this.id; //"вспоминаем", к какому экз. LV относится событие загрузки
 
		trace('Загрузка с датчика №' + id + ', переменная var1 = ' + this.var1 + ', переменная var2 = ' + this.var2);
 
		if (loadCount == loadTotal)
		{
			nextActions();
		}
	}
}
 
function nextActions () 
{
	trace('дальнейшие действия');
	//дальнейшие действия
}
__________________
Идите первым!


Последний раз редактировалось mooncar; 22.11.2011 в 16:09.
Старый 22.11.2011, 15:50
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Вот мой вариант с последовательной загрузкой:
Код AS1/AS2:
// готовимся к загрузке
var files:Array = ['filename0', 'filename1', 'filename2', 'filename3', 'filename4'];
// массив имен файлов для загрузки.
var dataArray:Array = [];
// массив для данных из файлов для дальнейшей обработки.
var fileLoader:LoadVars = new LoadVars();
//загрузчик
fileLoader.onData = FileLoaded;
//обработчик окончания загрузки очередного файла
var filesCount = 0;
// инициируем счетчик
var filesCountMax = files.length;
// общее количество файлов для загрузки
//инициируем загрузку первого файла
var fileToLoad:String = files[filesCount];
// текущий загружаемый файл
fileLoader.load(fileToLoad, fileLoader, "GET");
// понеслось 
///
function FileLoaded(fileData:String) {
	if (src == undefined) {
		dataArray.push("error");
		// ошибка загрузки
		return;
	}
	dataArray.push(fileData);
	// ошибки нет, записываем полученные данные в dataArray
	if (filesCount<filesCountMax) {
		// если счетчик не дошел до макс.значения, грузим следующий файл
		fileToLoad = files[filesCount++];
		fileLoader.load(fileToLoad, fileLoader, "GET");
		return;
	}
	// загрузка всех файлов окончена,смотрим, что получилось  
	trace(dataArray);
	// а вот с этой строки надо делать переход в код, где обрабатываются данные загруженных файлов из dataArray.
	// например
	ActionForData(dataArray);
}
function ActionForData(dataArray:Array) {
	// TODO
}


Последний раз редактировалось alexcon314; 22.11.2011 в 15:55.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
loadvars , txt , загрузка
Опции темы
Опции просмотра

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

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


 


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


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