Хотя я не уверен, что именно не так с вашим кодом, есть вещи, которые я бы не использовал в проекте:
- Выдача HTTP-запросов на один и тот же URL-адрес несколько раз по времени,а не ожидание завершения каждого запроса перед отправкой другого.
- Loader или URLLoader экземпляры, хранящиеся в переменных локальной функции.Обычно локальные переменные функции существуют только до тех пор, пока функция выполняется, и их содержимое (если оно каким-то образом не удерживается областью приложения) может быть уничтожено сборщиком мусора буквально в ЛЮБОЙ момент без учета ваших намерений. UPD: Был вход, что GC не будет уничтожать URLLoader , пока у него есть незаконченный запрос на обработку, тем не менее, иметь неразрушимые экземпляры, висящие где-то, куда вы не можете добраться до них, не очень хорошая идеялибо.
- Функции, определенные в других функциях.
С учетом всего вышесказанного должно работать нормально:
// Keep URLLoader instance within the scope.
var L:URLLoader;
// Issue the first request.
loadNext();
// This function issues the new request.
function loadNext():void
{
var aReq:URLRequest = new URLRequest("xxxxxxx");
L = new URLLoader(aReq);
L.addEventListener(Event.COMPLETE, onData);
// Error handling - a must have.
L.addEventListener(IOErrorEvent.IO_ERROR, onError, false, 0, true);
L.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError, false, 0, true);
L.load();
}
// This function handles normal data processing.
function onData(e:Event):void
{
// Sanity check. If event is triggered by anything
// but the current URLLoader instance - do nothing.
if (e.target != L) return;
// Your data processing here.
trace(L.data);
// Clean-up the current request and schedule the next one.
resetRequest();
waitNext();
}
// This function handles all error events.
function onError(e:Event):void
{
// Sanity check. If event is triggered by anyhting
// but the current URLLoader instance - do nothing.
if (e.target != L) return;
// Report the error.
trace("Oh, no:", e);
// Clean-up the current request and schedule the next one.
resetRequest();
waitNext();
}
// This function destroys the current request.
function resetRequest():void
{
// Sanity check. If there's no URLLoader instance - do nothing.
if (!L) return;
L.removeEventListener(Event.COMPLETE, onData);
L = null;
}
// This function calls "loadNext" in 4 seconds.
function waitNext():void
{
// Although the use of setTimeout counts as outdated,
// it will still for our needs here.
setTimeout(loadNext, 4000);
}