Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   A script in this movie is causing adobe flash player 9 to run slowly (http://www.flasher.ru/forum/showthread.php?t=91300)

bleed 29.01.2007 20:29

A script in this movie is causing adobe flash player 9 to run slowly
 
Добрый день,
написал простенький аплоадер файлов на сервер через flash
после выбора файлов происходит загрузка, которая длится некоторое время так вот примерно минут через пять выдается такое сообщение с выбором прервать или нет работу мувика:
Цитата:

A script in this movie is causing adobe flash player 9 to run slowly. If it continues to run, you computer may become unresponsive. Do you want to abort the script?
Как его избежать и по чему оно вообще лезет может кто знает?

etc 29.01.2007 20:35

Где-то бесконечный цикл получается. Или рекурсия.

Kikasso 30.01.2007 00:15

Цитата:

Сообщение от bleed
Как его избежать и по чему оно вообще лезет может кто знает?

В коде ошибка, а где - без понятия. Приложите исходник, найдем.

aksios 30.01.2007 08:22

Цитата:

Сообщение от bleed
написал простенький аплоадер файлов на сервер через flash

Цитата:

Где-то бесконечный цикл получается. Или рекурсия.
Наверное простенький не самое правильное определение, когда речь об отправке флешем данных на сервер. Поэтому и не работает.

bleed 30.01.2007 18:33

Код:

import flash.net.FileReferenceList;
import flash.net.FileReference;
var list:Array = new Array();
var item:FileReference;
var curnumber:Number = 0;
rec_mc._visible = false;
rec_mc.fillColor = 0x000066;

var listener:Object = new Object();

function Upload(i:Number)
{
        item = list[i];
        url="http://domain.ru/addfoto.php?action=upload&data="+escape(data);
        trace("Upload "+item.name);
    trace(item.addListener(listener));
        item.upload(url);
}

listener.onSelect = function(fileRefList:FileReferenceList) {
    trace("onSelect");
    list = fileRefList.fileList;
        rec_mc._visible = true;
        com.text = "Выбранно всего файлов: "+list.length+"шт. Осталось "+((list.length-1)-curnumber)+"шт.";
        trace("Выбранно файлов: "+list.length+"шт. Осталось ");
        Upload(0);
}

listener.onCancel = function():Void {
    trace("onCancel");
}

listener.onOpen = function(file:FileReference):Void {
    trace("onOpen: " + file.name);
        comment.text = "Загрузка: "+file.name;
}

listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
    trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);
        var percent = bytesLoaded/file.size;
        drawRec(percent);
}

listener.onComplete = function(file:FileReference):Void {
    trace("onComplete: " + file.name);
        comment.text = "Загруженно";
        curnumber++;
        if(curnumber < list.length)
        {
                com.text = "Выбранно всего файлов: "+list.length+"шт. Осталось "+((list.length-1)-curnumber)+"шт.";
                Upload(curnumber);
        }
        else
        {
                comment.text = "Все Загруженно";
                getURL("http://domain.ru/");
        }
}

listener.onHTTPError = function(file:FileReference, httpError:Number):Void {
    trace("onHTTPError: " + file.name + " httpError: " + httpError);
        comment.text = "error";
}

listener.onIOError = function(file:FileReference):Void {
    trace("onIOError: " + file.name);
        comment.text = "io error";
}

listener.onSecurityError = function(file:FileReference, errorString:String):Void {
    trace("onSecurityError: " + file.name + " errorString: " + errorString);
        comment.text = "sec error";
}

function drawRec(per) {
trace("drawrec"+per);
rec_mc.clear();
rec_mc.lineStyle(0);
rec_mc.beginFill(rec_mc.fillColor, 70);
rec_mc.lineTo(per*rec_mc._width, 0);
rec_mc.lineTo(per*rec_mc._width, rec_mc._height);
rec_mc.lineTo(0, rec_mc._height);
rec_mc.lineTo(0, 0);
rec_mc.endFill();
}
var fileRef:FileReferenceList = new FileReferenceList();
fileRef.addListener(listener);
fileRef.browse();

Скрипт работает, т.е. файлы отправляются на сервер, единственно что вылазит вот то сообщение примерно минут через пять работы если указать в нем что не прерывать работы мувика, мувик аплоадит до конца и прерывает работу, т.е. выполняет то что ему нужно.

bleed 30.01.2007 18:37

Цитата:

Сообщение от aksyos
Наверное простенький не самое правильное определение, когда речь об отправке флешем данных на сервер. Поэтому и не работает.

а простенький потому что это мой самый первый опыт программирования на ActionScript, потому не думаю что выполненно прямо архи профессионально, хотя опыт на с++ php javascript и perl дает о себе знать вроде все просто и понятно.

etc 30.01.2007 18:40

Судя по всему, ты не отписываешь своего листенера от событий предыдущего загруженного файла.

bleed 30.01.2007 18:59

Цитата:

Сообщение от __etc
Судя по всему, ты не отписываешь своего листенера от событий предыдущего загруженного файла.

да, я думал об этом после того как вы написали что возможна рекурсия, сейчас пришло в голову такое изменение
Код:

function Upload(i:Number)
{
        item = list[i];
        url="http://domain.ru/addfoto.php?action=upload&data="+escape(data);
        trace("Upload "+item.name);
item.removeListener(listener);
    trace(item.addListener(listener));
        item.upload(url);
}

корректно ли так, если при первом вызове функции Upload ( Upload(0); ) когда listener еще не добавлен делать item.removeListener(listener); ?

etc 30.01.2007 20:11

Не так.
Ты уже пользуешь новый item, а не старый. Т.е.
Код:

function Upload(i:Number)
{
if (item) {
  item.removeListener(listener);
}
        item = list[i];
        url="http://domain.ru/addfoto.php?action=upload&data="+escape(data);
        trace("Upload "+item.name);

    trace(item.addListener(listener));
        item.upload(url);
}


bleed 31.01.2007 07:55

Цитата:

Сообщение от __etc
Не так.
Ты уже пользуешь новый item, а не старый. Т.е.

да сорри ступил, не помогло, также примерно на 20м файле выдает собщение :(

etc 31.01.2007 11:08

Попробуй на другом сервере. Если повторится — ищи ошибку во флеше, так по коду не видно…

bleed 31.01.2007 16:07

Цитата:

Сообщение от __etc
Попробуй на другом сервере. Если повторится — ищи ошибку во флеше, так по коду не видно…

так сервер поидее вообще не причем, флэш исполняется то на клиенте,
попробывал на двух компам выдает ошибку когда на 40м файле, когда на 20м

etc 31.01.2007 16:14

Ну тогда не нужно заливать сразу столько файлов, делать небольшой интервал перед заливкой следующего.

bleed 31.01.2007 17:53

нам как раз и нужно чтобы заливалось много файлов сразу, потому и выбрали flash для этого решения, иначе просто бы делали через обычную форму <input type="file"> но юзеры есть не совсем проницательные, думают раз нажали отправить то файлы мигом ушли, а потом бегут и говаорят что файлы не добавляются, потому нам и нужен прогресс бар чтобы юзерам был виден ход аплоада, не прихоти ради а работы для...
а чем можно делать интервал?, я поискал вроде аналогичной PHPшной функции sleep(int seconds) во флэше нету, есть stop и play но как программно вызвать play после того как была вызвана stop, думаю такое невозможно.

etc 31.01.2007 18:06

setInterval

bleed 31.01.2007 19:51

Цитата:

Сообщение от __etc
setInterval

помогло! спасибо!


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

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