|
|
|||||
Регистрация: Jun 2010
Сообщений: 128
|
LoadVars синхронная загрузка
Здравствуйте.
Проблема следующая: есть несколько текстовых файлов, переменные из которых синхронно, по setInterval, будут грузиться во флэш. Дальнейший код должен выполняться только после успешной загрузки ВСЕХ файлов. Как это лучше реализовать? Пока идея только одна - сделать загрузку в цикле while, который просто не пустит дальше (будет бесконечно выполняться), пока не загрузится предыдущий файл. И функцию .onLoad писать для последнего в списке. Какие еще могут быть варианты? Заранее спасибо за любой совет. |
|
|||||
Модрон-ветеринар
|
Самый простой и очевидный способ - воспользоваться методами класса и счетчиком.
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 () { //дальнейшие действия } PS. Простите, но что вы подразумеваете под "синхронно, по setInterval" ? Синхронно - это что с чем синхронизировано? Просто загрузка файла всегда асинхронна по отношению к работе кода, для того и обработчики событий загрузки введены...
__________________
Идите первым! Последний раз редактировалось mooncar; 16.09.2011 в 17:43. |
|
|||||
Регистрация: Sep 2011
Сообщений: 3
|
Немного не в тему. Не могу создать новую ветку
Привет всем. AS2 мучаю. как мне вытащить переменную s? |
|
|||||
[+1.3 24.09.11]
Регистрация: May 2010
Сообщений: 84
|
слушай этого чувака он дело говорит!
|
|
|||||
Регистрация: Jun 2010
Сообщений: 128
|
Спасибо, просто и красиво, то что надо.
|
|
|||||
Регистрация: Jun 2010
Сообщений: 128
|
Цитата:
Еще раз спасибо. |
|
|||||
listener
|
Цитата:
Может быть, можно все переменные в одном файле хранить и грузить его единожды? |
|
|||||
Регистрация: Jun 2010
Сообщений: 128
|
Вообще это данные с датчиков, информация с каждого датчика пишется в отдельный файл, и исправить ситуацию, по крайней мере, своими силами, невозможно. А на странице должны отображаться, скажем, температура на объекте, сила тока, напряжение и т. д. для установки, или даже для нескольких однотипных установок, и все это - на выбранный момент времени. А начиналось все как "простенькая флэшка типа работает аппарат - не работает". В общем - ховайся.
|
|
|||||
Модрон-ветеринар
|
Ну можно вот так попробовать. Все же несколько экземпляров LoadVars, но сам обработчик один.
PS. Тестил с удаленным расположением файлов на серваке, все ок, по крайней мере с 3-мя файлами. 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. |
|
|||||
listener
|
Вот мой вариант с последовательной загрузкой:
// готовимся к загрузке 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, время: 18:55. |
|
« Предыдущая тема | Следующая тема » |
Теги |
loadvars , txt , загрузка |
Опции темы | |
Опции просмотра | |
|
|