Просмотр полной версии : 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?
Как его избежать и по чему оно вообще лезет может кто знает?
Где-то бесконечный цикл получается. Или рекурсия.
Как его избежать и по чему оно вообще лезет может кто знает?
В коде ошибка, а где - без понятия. Приложите исходник, найдем.
написал простенький аплоадер файлов на сервер через flash
Где-то бесконечный цикл получается. Или рекурсия.
Наверное простенький не самое правильное определение, когда речь об отправке флешем данных на сервер. Поэтому и не работает.
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();
Скрипт работает, т.е. файлы отправляются на сервер, единственно что вылазит вот то сообщение примерно минут через пять работы если указать в нем что не прерывать работы мувика, мувик аплоадит до конца и прерывает работу, т.е. выполняет то что ему нужно.
Наверное простенький не самое правильное определение, когда речь об отправке флешем данных на сервер. Поэтому и не работает.
а простенький потому что это мой самый первый опыт программирования на ActionScript, потому не думаю что выполненно прямо архи профессионально, хотя опыт на с++ php javascript и perl дает о себе знать вроде все просто и понятно.
Судя по всему, ты не отписываешь своего листенера от событий предыдущего загруженного файла.
Судя по всему, ты не отписываешь своего листенера от событий предыдущего загруженного файла.
да, я думал об этом после того как вы написали что возможна рекурсия, сейчас пришло в голову такое изменение
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); ?
Не так.
Ты уже пользуешь новый 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);
}
Не так.
Ты уже пользуешь новый item, а не старый. Т.е.
да сорри ступил, не помогло, также примерно на 20м файле выдает собщение :(
Попробуй на другом сервере. Если повторится — ищи ошибку во флеше, так по коду не видно…
Попробуй на другом сервере. Если повторится — ищи ошибку во флеше, так по коду не видно…
так сервер поидее вообще не причем, флэш исполняется то на клиенте,
попробывал на двух компам выдает ошибку когда на 40м файле, когда на 20м
Ну тогда не нужно заливать сразу столько файлов, делать небольшой интервал перед заливкой следующего.
нам как раз и нужно чтобы заливалось много файлов сразу, потому и выбрали flash для этого решения, иначе просто бы делали через обычную форму <input type="file"> но юзеры есть не совсем проницательные, думают раз нажали отправить то файлы мигом ушли, а потом бегут и говаорят что файлы не добавляются, потому нам и нужен прогресс бар чтобы юзерам был виден ход аплоада, не прихоти ради а работы для...
а чем можно делать интервал?, я поискал вроде аналогичной PHPшной функции sleep(int seconds) во флэше нету, есть stop и play но как программно вызвать play после того как была вызвана stop, думаю такое невозможно.
setInterval
помогло! спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.