Volledige versie bekijken : Functie in for probleem
FredericCox
%Europe/Berlin %076 %2005, 02:50
Hallo, ik zit nu al twee uur te grommelen op mezelf en Flash:)
Dit is wat ik wil doen:
Elke regio van een land kan opgevraagd worden via een xml:
vb: regionDetails.asp?outputType=XML&actionType=view®ionID=2
<?xml version="1.0" ?>
- <HattrickData>
<FileName>regionDetails.asp</FileName>
<Version>1.1</Version>
<UserID>100856</UserID>
<FetchedDate>2005-07-02 02:39:26</FetchedDate>
<ActionType>view</ActionType>
- <League>
<LeagueID>1</LeagueID>
<LeagueName>Sverige</LeagueName>
- <Region>
<RegionID>2</RegionID>
<RegionName>Blekinge</RegionName>
<WeatherID>1</WeatherID>
<TomorrowWeatherID>1</TomorrowWeatherID>
<NumberOfUsers>470</NumberOfUsers>
<NumberOfOnline>2</NumberOfOnline>
</Region>
</League>
</HattrickData>
Nu wil ik voor elke regiopagina(id=xx) de naam en leagueID van het land ophalen.
Mijn code:
for(i=0;i<10;i++){
worldXML = new XML()
'linkff verkort omdat het niet helemaal in code past op flashfocus
worldXML.load("..regionDetails.asp&outputType=XML&actionType=view®ionID=" + i)
worldXML.ignoreWhite = true
worldXML.onLoad = GetWorldInfo
}
function GetWorldInfo(success){
trace(i)
trace(this.getBytesTotal())
trace(worldXML.firstChild.childNodes[5].childNodes[0].childNodes)
trace(worldXML.firstChild.childNodes[5].childNodes[1].childNodes)
}
Deze code werkt perfect! Behalve als ik de for loop toepas. Dan traced Flash alleen maar bij i=10.
10
563
1
Sverige
Hoe komt het dat hij dat zo verkeerd doet?
Folkert
%Europe/Berlin %088 %2005, 03:08
je zegt feitelijk 10 x worldXml = new Xml, daarmee overschrijf je de andere 9 keer ;)
Logischere opbouw zou zijn als je 1 maal je xml laad en vervolgens na de onLoad je for loop gebruikt om de xml tags leeg te trekken.
Verder wen jezelf ook even aan, eerst de onload te doen en daarna pas de load.
dus eerst jeXml.onLoad = jeOnLoad Functie; en daarna pas jeXml.load("url")
Shivan
%Europe/Berlin %089 %2005, 03:08
Je plaatst al nieuwe XML in het XML object voordat de vorige is ingeladen. Je zou pas de volgende moeten ophalen nadat de vorige is opgehaald, je moet dit dus in je onLoad functie verwerken.
FredericCox
%Europe/Berlin %442 %2005, 11:37
Je plaatst al nieuwe XML in het XML object voordat de vorige is ingeladen. Je zou pas de volgende moeten ophalen nadat de vorige is opgehaald, je moet dit dus in je onLoad functie verwerken.
Maar ik heb ook elke keer (elke i) een andere XML nodig...
Dauntless
%Europe/Berlin %456 %2005, 11:57
Maar ik heb ook elke keer (elke i) een andere XML nodig...
Welja, je moet wanneer heel het xml object is ingeladen de xml nodes doorlopen. Nu laad je gewoon 10x hetzelfde xml object in en de kans is inderdaad zeer groot dat hij wordt overschreven door het volgende vooraleer hij zelfs volledig geladen is.
Dit is een logischere opbouw:
worldXML = new XML()
worldXML.ignoreWhite = true
worldXML.onLoad = GetWorldInfo
worldXML.load("..regionDetails.asp&outputType=XML&actionType=view®ionID=" + i)
function GetWorldInfo(success){
if(success){
for(i=0;i<10;i++){
trace(worldXML.firstChild.childNodes[i]
}
}else {
trace("inladen is mislukt");
}
}
FredericCox
%Europe/Berlin %474 %2005, 12:23
Welja, je moet wanneer heel het xml object is ingeladen de xml nodes doorlopen. Nu laad je gewoon 10x hetzelfde xml object in en de kans is inderdaad zeer groot dat hij wordt overschreven door het volgende vooraleer hij zelfs volledig geladen is.
Dit is een logischere opbouw:
worldXML = new XML()
worldXML.ignoreWhite = true
worldXML.onLoad = GetWorldInfo
worldXML.load("..regionDetails.asp&outputType=XML&actionType=view®ionID=" + i)
function GetWorldInfo(success){
if(success){
for(i=0;i<10;i++){
trace(worldXML.firstChild.childNodes[i]
}
}else {
trace("inladen is mislukt");
}
}
Je snapt het niet denk ik, ofwel ik niet:) regionDetails.asp&outputType=XML&actionType=view®ionID=" + i
Deze i moet ook veranderen, dat is telkens een andere XML
Dauntless
%Europe/Berlin %477 %2005, 12:27
Oh, zo, ok, dat had ik inderdaad niet gezien :)
Dan moet je telkens een nieuw xml object aanmaken ipv het vorige te overschrijven.
Maar, is het niet logischer (en gemakkelijker) als je gewoon ervoor zorgt dat je een .asp hebt die al die gegevens zelf ophaalt en die in een xml zet?
FredericCox
%Europe/Berlin %481 %2005, 12:33
Oh, zo, ok, dat had ik inderdaad niet gezien :)
Dan moet je telkens een nieuw xml object aanmaken ipv het vorige te overschrijven.
Maar, is het niet logischer (en gemakkelijker) als je gewoon ervoor zorgt dat je een .asp hebt die al die gegevens zelf ophaalt en die in een xml zet?
Liever telkens een nieuw XML object, maar hoe doe ik dit?
Ik probeerde al ["WorldXML"+i] = new XML() maar dat lukt niet
Dauntless
%Europe/Berlin %484 %2005, 12:37
Dat zou inderdaad toch moeten werken??
for (i=0; i<10; i++) {
this["worldXML"+i] = new XML();
var _worldXML = this["worldXML"+i];
_worldXML.ignoreWhite = true;
_worldXML.onLoad = GetWorldInfo;
_worldXML.load("..regionDetails.asp&outputType=XML&actionType=view®ionID="+i);
}
function GetWorldInfo(success) {
trace(i);
trace(this.getBytesTotal());
trace(this.firstChild.childNodes[5].childNodes[0].childNodes);
trace(this.firstChild.childNodes[5].childNodes[1].childNodes);
}
Dit misschien?
FredericCox
%Europe/Berlin %487 %2005, 12:41
Dit misschien?[/QUOTE]
Dat traced:
10
561
1
Sverige
10
556
1
Sverige
10
558
1
Sverige
10
555
1
Sverige
10
562
1
Sverige
10
572
1
Sverige
10
557
1
Sverige
10
573
1
Sverige
10
563
1
Sverige
10
22
Dus hij doet 10 keer nummer 10 :s vreemd probleem
Dauntless
%Europe/Berlin %489 %2005, 12:44
Dat op zich is logisch aangezien je for loop al helemaal is doorlopen eer de het eerste stuk xml ingeladen is...
Maar het is dus ook exact dezelfde xml die hij inlaad?
FredericCox
%Europe/Berlin %493 %2005, 12:50
Dat op zich is logisch aangezien je for loop al helemaal is doorlopen eer de het eerste stuk xml ingeladen is...
Maar het is dus ook exact dezelfde xml die hij inlaad?
Nog even aan het testen maar hij blijkt te werken hoor...de eerste 10 regio's waren gewoon allemaal uit Sverige :)
FredericCox
%Europe/Berlin %503 %2005, 13:05
Nog even aan het testen maar hij blijkt te werken hoor...de eerste 10 regio's waren gewoon allemaal uit Sverige :)
for (i=0;i<2100;i++) {
this["worldXML"+i] = new XML();
var _worldXML = this["worldXML"+i];
trace(_worldXML)
_worldXML.ignoreWhite = true;
_worldXML.onLoad = GetWorldInfo;
_worldXML.load("http://www.nastjaceh.com/Hattrick2Day/xml.php?page=regionDetails.asp&outputType=XML&actionType=view®ionID="+i);
}
function GetWorldInfo(success) {
trace(i);
trace(this.getBytesTotal());
trace(this.firstChild.childNodes[5].childNodes[0].childNodes);
trace(this.firstChild.childNodes[5].childNodes[1].childNodes);
}
Hij komt ineens niet in de functie?:s
Als ik achter GetWorldInfo bij onload () zet dan traced ie de i wel en de rest is undefined, whaa:s:sword zot:)
Dauntless
%Europe/Berlin %516 %2005, 13:23
Hier een voorbeeld van hoe je het kan oplossen met recursie:
var ID:Number = 0;
var eindID:Number = 10;
loadXMLObject(ID);
function loadXMLObject(i){
var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.onLoad = processData;
myXML.load("mijnASPBestand.asp?id="+i);
}
function processData(success){
if(success){
trace(this.childNodes[i]); //oid, dus je data opvragen
if(ID == eindID) return;//zorgen dat er geen oneindige loop is
loadXMLObject(ID++);
}
}
't Is maar even snel geschreven, maar je zou het id wel moeten begrijpen.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.