Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   URLLoader , результат разбить на строки в массив (http://www.flasher.ru/forum/showthread.php?t=202561)

infbyte 23.07.2013 18:55

URLLoader , результат разбить на строки в массив
 
В данный момент берутся все "анекдоты" и добавляются в 0-ую ячейку массива.
Подскажите плиз, как сделать так, что бы каждый анекдот был в новой ячейки массива.
или хотя бы в какую сторону копать? нужно в ручную парсить или существует какая-нибудь функция\событие?



Код AS3:

import flash.net.*;
import flash.events.*;
var myArray:Array = []; // создаем пустой массив
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("C:\q.txt"));
loader.addEventListener(Event.COMPLETE,onComplete);
 
 
function onComplete(event:Event):void
{
        var myxml:XML = XML(event.target.data);
        //trace(myxml.anekdot.text());
        myArray.push(myxml.anekdot.text());
        //trace(myArray.length);
trace(myArray);
}


Код:

<?xml version="1.0" encoding="utf-8"?>
<doc>
<anekdot>fffffff</anekdot>
<anekdot>gggggggg</anekdot>
<anekdot>hhhhhhh</anekdot>
<anekdot>3jjjjjjjj</anekdot>
<anekdot>kkkkkkkk</anekdot>
<anekdot>lllllll</anekdot>
<anekdot>eeeeeeeee</anekdot>
</doc>


KumoKairo 23.07.2013 20:04

Код AS3:

function onComplete(event:Event):void
{
        var myxml:XML = XML(event.target.data);
        for each (var anekdot:String in myxml.anekdot)
        {
            trace(anekdot);
        myArray.push(anekdot);
        }
}


infbyte 14.07.2014 04:51

подниму старую темку...
Подскажите плиз.
А почему кстати массив myArray не виден вне функции onComplete?
как сделать что бы можно было его использовать из других участков кода?
например вот так:
Код AS1/AS2:

function onComplete(event:Event):void
{
        var myxml:XML = XML(event.target.data);
        for each (var anekdot:String in myxml.anekdot)
        {
 
        myArray.push(anekdot);
        }
}
  trace(anekdot);


samana 14.07.2014 11:39

В вашем примере массив myArray как раз таки виден вне метода onComplete.
------------------------------
Код AS3:

trace(anekdot);

Так не сработает. Тут вы даже не обращаетесь к массиву. Доступ к элементам массива осуществляется через квадратные скобки в которых указывается индекс (номер элемента от 0 до myArray.length-1).
Например для первого элемента
Код AS3:

trace(myArray[0]);


infbyte 14.07.2014 16:48

Не правильно написал вчера немного код.
Вот так сейчас у меня:


Код AS3:

import flash.net.*;
import flash.events.*;
var myArray:Array = []
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("G:\1.txt"));
loader.addEventListener(Event.COMPLETE,onComplete);
 
 
function onComplete(event:Event):void
{
        var myxml:XML = XML(event.target.data);
        for each (var an:String in myxml.an)
        {
 
        myArray.push(an);
 
        }
 
}
 
                trace(myArray[0]);

В результате пишет undefined , почему-то не видит массив этот.

Но если вывод сделать внутри функции onComplete, то выводит массив.
не могу понять почему

или у меня что-то уже с самим IDE...

Nooob 14.07.2014 18:59

потому onComplete вызовется позже trace(myArray[0]). Флешовые события загрузки, декодирования, таймера и прочего происходят в следующем кадре или позже.

infbyte 15.07.2014 01:05

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


В кадре с игровым столом(12 кадр) нужно узнать длину массива.
Но по какой-то причине, файл не успевает скачиватьтся и length массива возвращает 0


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


Вот код кадра с выбором игры:

Код AS3:

stop();
var type_game:int;
 
 
import flash.net.*;
import flash.events.*;
var myArray:Array = []; // создаем пустой массив
Security.loadPolicyFile("http://ya.ru/crossdomain.xml");
var loader:URLLoader = new URLLoader();
//loader.load(new URLRequest("http://ya.ru/"+type_game+".txt"));//переместил
loader.addEventListener(Event.COMPLETE,onComplete);
 
 
function onComplete(event:Event):void
{        var myxml:XML = XML(event.target.data);
        for each (var anekdot:String in myxml.anekdot)
        {           
        myArray.push(anekdot);
        }
}
 
 
 
o1.addEventListener(MouseEvent.CLICK, qwe2)
function qwe2(event:MouseEvent):void{         
        type_game = 1;/////////////////@
        loader.load(new URLRequest("http://ya.ru/"+type_game+".txt"));
        gotoAndStop(12);
}
 
 
//////////////////////////////////////////////
o2.addEventListener(MouseEvent.CLICK, qwe4)
function qwe4(event:MouseEvent):void{ 
        type_game = 2;////////////////@
        loader.load(new URLRequest("http://ya.ru/"+type_game+".txt"));
        gotoAndStop(12);
}

код 12 кадра:
Код AS3:

trace(myArray.length);// возвращает 0

Если выполнять этот код не сразу, а например через кнопку , секунд через 5, то возвращает все как нужно. т.е. склоняюсь к тому что не успевает выкачаться

Nooob 15.07.2014 01:17

gotoAndStop(12) в onComplete. ещё раз повторяю нужно дожидаться загрузки и потом выполнять то что нужно

infbyte 15.07.2014 01:28

теперь понял.
просто думал что просто вызывается позже, а оказывается вызывается позже и работает до тех пор пока не скачает.
спасибо)

Dmitriy154 15.07.2014 12:56

вместо XML использовать String и метод split


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

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