2012-02-28 6 views
-2

Я пытаюсь получить значение из функции, которая является COMPLETE-событием URLLoader, но даже с объявлением переменных вне функции не позволит мне получить значение. Я застрял.AS3 Как вы объявляете глобальную переменную?

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

// Initialise a URLLoader to get XML data from XML file 
var myFPBLoader:URLLoader = new URLLoader(); 
myFPBLoader.load(new URLRequest("flightPlannerBoard.xml")); 


// Check XML data fully loaded 
myFPBLoader.addEventListener(Event.COMPLETE, processFPBxml); 

var myXML:XML = new XML();// Declared **outside** function 

function processFPBxml(e:Event):void { 
this.myXML = XML(e.target.data); 
trace("yep" + myXML); // This works 
myTraceXML(); 
} 

function myTraceXML(){ 
trace("more tests:" + myXML); // **This trace works** 
} 

trace("more tests:" + myXML); // This **doesn't** work 

Как вы получаете ценность, которую можете использовать всякий раз, когда хотите?

+2

Я объяснил, почему это не работает в вашем предыдущем вопросе, пожалуйста, не создавайте новые вопросы для той же темы. – shanethehat

+0

Возможный дубликат [AS3 Ввод функции blah() {вокруг кода генерирует ошибки в строках кода, которые я не имею) (http://stackoverflow.com/questions/9464866/as3-putting-function-blah-around-code-generates -errors-on-lines-of-code-i-don) – shanethehat

+1

Вы должны удалить этот вопрос и прочитать ответ в последнем. –

ответ

2

Вот что происходит в вашем коде:

  1. функции processFPBxml(), myTraceXML() и переменные myFBPLoader и myXML объявлены.
  2. XML начинает загрузку myFPBLoader.load. Код на данном этапе не останавливается. Загрузка представляет собой асинхронный вызов, а остальная часть кода выполняется сразу.
  3. пустой трассировка XML trace("more tests:" + myXML); // This **doesn't** work
  4. XML загружен и отправлен Event.COMPLETE.
  5. EventHandler, присвоенный предварительному событию, вызывает ответ: processFPBxml(). На этом этапе myXML присваивается загруженным данным.
  6. myTraceXML() называется.

Теперь, если вы хотите продолжить выполнение кода после загрузки XML, вам необходимо разделить свой код на отдельные функции, которые выполняют конкретные задачи и вызывают эти функции после получения данных из XML. В этом случае вы можете переименовать myTraceXML() в init() или что-нибудь, что имеет для вас смысл, и написать остальную часть программы (не обязательно в этой конкретной функции, используйте ее как отправную точку).

+0

Спасибо. Так что, похоже, у меня круговая проблема. В одном вопросе, который я задал недавно, мне сказали НЕ поместить мой код в функцию, потому что он даст мне ошибку - это правда. Если я запустил остальную часть кода вне функции, он отлично работает. НО, когда я пытаюсь использовать значение myXML, он не может по причинам, указанным выше. Итак, насколько я понимаю из вышеизложенного, что у меня должна быть функция для моего кода и пытаться выяснить, почему она выдает ошибку из этой функции? – user1203605

+0

Самое важное, что нужно понять, это поток (выполнение) кода. Заказ, который вы объявляете, не обязательно означает, что они будут выполняться последовательно. Начиная с строки 1, вы должны понимать, что делает каждая строка, и что можно ожидать в этой точке. Если это кажется трудным, тогда вы упрощаете код, разбиваете его на функции. Если это не помогает, попробуйте отладить все и обратите внимание на ошибки. – package

+0

Спасибо за объяснение. Мне была показана ошибка в коде, который я хотел бы включить в функцию, которая появилась только в функции, и теперь я многому научился в этом процессе, поэтому я ценю ваши отзывы. Еще раз спасибо. – user1203605

0

Как вы упомянули, запрошенные данные через URLLoader получены асинхронно.

Это значит, что данные, полученные после , не могут быть получены, пока Flash не получил его. То, что вы пытаетесь сделать, нелогично и не может быть сделано.

Если бы это было возможно, почему веб-приложения имели бы загрузку символов и т.п. при поиске информации для отображения?

+0

Я понимаю асинхронную часть. Вот почему у меня есть 2 функции. Если бы я мог разместить остальную часть кода, мне нужно было запустить ее во второй функции, все было бы хорошо. Проблема в том, что, как только я завершу код в функцию blah() {...} он выдает ошибку. Что в другом вопросе кто-то сказал, чтобы он не выполнял функции ... так что теперь у меня осталось 2 ответа a) Не используйте функцию b) Используйте функцию. Итак, кажется, мне нужно использовать функцию и выяснить, почему код не любит сидеть в функции ... это имеет смысл? – user1203605

Смежные вопросы