PDA

Просмотр полной версии : Как выдрать данные из функции после загрузки Xml?


Vinny[x]
14.03.2004, 21:01
Суть дела такова. Имеется скрипт в котором функция считывает данные из ХML файла и заносит данные в массив.
Объясните мне, почему у меня не получается вывести данные массивы за пределами функции?
Как это сделать правильно, чтобы все работало?
Мне эти данные нужно обрабатывать по всей временной шкале.
Может посоветуете более рациональный вариант хранения данных, чем мой 3-х мерный массив?

----Скрипт---


function ParseXML() {
quiz = new Array();
rootnode = xmlDoc.firstChild;
he = rootnode.firstChild;
for(var q=0; rootnode.childNodes.length > q; q++ ){
if(q>0){
he = he.nextSibling;
}
children = he.childNodes;
quiz[q] = new Array();
for(var i = 0; i < children.length; i++){
quiz[q][i] = new Array();
trace(children[i].firstChild.toString());
quiz[q][i]["question"] = children[i].firstChild;
atrib = children[i].attributes;
for(attrib in atrib){
quiz[q][i]["answer"] = atrib[attrib];
trace(atrib[attrib].toString());
}
}
}
trace(quiz[0][3]["question"]); // --- Вот тут выводит данные
}
xmlDoc=new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.load("test3.xml");
xmlDoc.onLoad = ParseXML;
stop();
trace(quiz[0][3]["question"]); // --- А вот тут не выводит





---test3.xml-------

<?xml version="1.0" encoding="utf-8"?>
<testing>

<quiz type="list" time="15">
<questionintro>Question 1</questionintro>
<answer correct="false">q1 Answer 1</answer>
<answer correct="true">q1 Answer 2</answer>
<answer correct="false">q1 Answer 3</answer>
<answer correct="false">q1 Answer 4</answer>
</quiz>
<quiz type="list" time="15">
<questionintro>Question 2</questionintro>
<answer correct="false">q2 Answer 1</answer>
<answer correct="true">q2 Answer 2</answer>
<answer correct="false">q2 Answer 3</answer>
<answer correct="false">q2 Answer 4</answer>
</quiz>

</testing>

silin
14.03.2004, 22:25
надо дождаться загрузки
this.onEnterFrame=function(){
if(quiz){
trace(quiz[0][3]["question"]); // --- А вот тут не выводит
delete this.onEnterFrame;
}
}

2K WebStudio
15.03.2004, 21:21
последовательность выполнение твоего сткрипта:

xmlDoc=new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.load("test3.xml");
stop();
trace(quiz[0][3]["question"]); // --- А вот тут не выводит
xmlDoc.onLoad = ParseXML;
////////////
function ParseXML() {
quiz = new Array();
rootnode = xmlDoc.firstChild;
he = rootnode.firstChild;
for(var q=0; rootnode.childNodes.length > q; q++ ){
if(q>0){
he = he.nextSibling;
}
children = he.childNodes;
quiz[q] = new Array();
for(var i = 0; i < children.length; i++){
quiz[q][i] = new Array();
trace(children[i].firstChild.toString());
quiz[q][i]["question"] = children[i].firstChild;
atrib = children[i].attributes;
for(attrib in atrib){
quiz[q][i]["answer"] = atrib[attrib];
trace(atrib[attrib].toString());
}
}
}
trace(quiz[0][3]["question"]); // --- Вот тут выводит данные
}

вот так

silin
15.03.2004, 21:34
а че 'вот так'
первый trace так и даст undefined, потому как quiz появится тока по оканчании загрузки ( см. выше)

2K WebStudio
16.03.2004, 21:10
я просто показал почему он и не должен выводить.
onLoad dagjkyztncz в конце, во всяком случае, позже всех действий кадра.