PDA

Просмотр полной версии : A script in this movie is causing adobe flash player 9 to run slowly


bleed
29.01.2007, 20:29
Добрый день,
написал простенький аплоадер файлов на сервер через 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
Как его избежать и по чему оно вообще лезет может кто знает?
В коде ошибка, а где - без понятия. Приложите исходник, найдем.

aksios
30.01.2007, 08:22
написал простенький аплоадер файлов на сервер через 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
Наверное простенький не самое правильное определение, когда речь об отправке флешем данных на сервер. Поэтому и не работает.
а простенький потому что это мой самый первый опыт программирования на ActionScript, потому не думаю что выполненно прямо архи профессионально, хотя опыт на с++ php javascript и perl дает о себе знать вроде все просто и понятно.

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

bleed
30.01.2007, 18:59
Судя по всему, ты не отписываешь своего листенера от событий предыдущего загруженного файла.
да, я думал об этом после того как вы написали что возможна рекурсия, сейчас пришло в голову такое изменение
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
Не так.
Ты уже пользуешь новый item, а не старый. Т.е.

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

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

bleed
31.01.2007, 16:07
Попробуй на другом сервере. Если повторится — ищи ошибку во флеше, так по коду не видно…
так сервер поидее вообще не причем, флэш исполняется то на клиенте,
попробывал на двух компам выдает ошибку когда на 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
setInterval
помогло! спасибо!