[JS]xmlimport probleem i.v.m timing van de functies

Pagina: 1
Acties:

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:18
Ik ben bezig met een applicatie. Deze applicatie werkt in de browser(Mozilla) en ontvangt alle gegevens van de server middels XML. De basis voor het laden van de XML is deze pagina: http://www.quirksmode.org/dom/importxml.html

Ik heb dit goed werkend. Echter gaat het fout als ik meerdere XML files achter elkaar wil laden. Ik roep dus meerdere malen achter elkaar de importXML functie uit het voorbeeld aan. De eerste XMLfile gaat gewoon goed maar de tweede blijft hangen. Deze wordt niet geheel geladen.

Wat is nu het vreemde aan dit verhaal: het gaat wel goed als ik er een settimout tussen zet van 500. Het eigenlijke probleem is dus volgens mij: er wordt niet gewacht op het uitvoeren van de functie voordat de volgende aan de slag gaat. Hoe kan ik hier wel voor zorgen?

code:
1
2
3
4
5
6
7
//dit gaat fout:
importXML(file1);
importXML(file2); 

//dit gaat wel goed:
importXML(file1);
setTimeout("importXML(file2)", 500);

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Probeer eens te spelen met synchroon/asynchroon inladen

of anders pas de importXML(file2); uitvoeren als de onload van file1 afgehandeld is.

[ Voor 45% gewijzigd door crisp op 03-10-2004 14:28 ]

Intentionally left blank


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:18
crisp schreef op 03 oktober 2004 @ 14:21:
Probeer eens te spelen met synchroon/asynchroon inladen
Hoe kan ik daar instellingen voor maken?
of anders pas de importXML(file2); uitvoeren als de onload van file1 afgehandeld is.
Hoe kan ik dit dan eenvoudig forceren? Moet ik ze misschien in een ifje zetten? Dat ga ik maar eens proberen denk ik.

Waarom dit trouwens een probleem voor mij is: als je de browser opstart is de timer te kort omdat het systeem dan nog druk bezig is met het laden van de browser. Dan gaat het dus ook fout met de setTimeout. Dat staat zo onprofessioneel.

Verwijderd

Hier staat wel het een en ander:
http://www.mozilla.org/xmlextras/

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:18
Mijn testresultaat was niet echt positief: de importXML functie returned al een waarde voor de functie geheel gereed is. Ik gebruik een aangepaste versie van importXML vandaar andere argumenten aan de functie. Dit heb ik getest:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
            
function docload(){ 
    //load current content of the transaction   
    if(importXML(tableXML, 'customers_list', 'customer', 'list.php')){
        if(importXML(tableXML, 'shop_list', 'product', 'cart.php')){
            if(transactions_update()){
                document.getElementById('productnr').focus();
            }
        }       
    }
}
Dit functioneerd niet. Ik denk dat de functie importXML al true geeft als het XML bestand gevonden is. xmlDoc.load retourneert namelijk true als het ophalen en laden van het XML document gelukt is. Ik wil echter dat de functie die aangeroepen wordt dit bevestigd.

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

En een simpel (lelijk) while loopje? Of de code van importxml aanpassen?

Na wat nadenken:

Het netste is een soort LaunchStuff Function

int í=0;

function launchStuff()
{
i++;
if (i==1) ImportXML('File1');
if (i==2) ImportXML('File2');
}

Aan het eind van function createTable() Doe je dan weer een lauchStuf().
Of je genereert aan het eind van createTable een onLoad waar je dan weer launchStuff aanknoopt (of werkt dat niet in Java? In C# wel :))

[ Voor 128% gewijzigd door BCC op 03-10-2004 15:33 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:18
(of werkt dat niet in Java? In C# wel )
JS staat voor JavaScript ;)

Verder is je idee duidelijk. Ik vind het echter een beetje een "omweg" Ik wil graag gewoon het netjes oplossen. Daarom zou ik van Crisp graag verduidelijking willen hebben omtrent:
Probeer eens te spelen met synchroon/asynchroon inladen

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

djluc schreef op 03 oktober 2004 @ 15:42:
[...]
JS staat voor JavaScript ;)

Verder is je idee duidelijk. Ik vind het echter een beetje een "omweg" Ik wil graag gewoon het netjes oplossen. [...]
Javascript, java.. allemaal hetzelfde :) Maar je wil eigenlijk van een object-georienteerde omgeving naar een niet-object georienteerde omgeving omdat je omgeving brak is :) Dus netjes oplossen gaat sowiezo niet volgens mij :) En volgens mij bedoelde crisp hetzelfde als mij :)

[ Voor 7% gewijzigd door BCC op 03-10-2004 16:58 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:18
offtopic:
Zijn de smiley's vandaag goedkoop bij BCC? ;)
Waar staat dat ik niet object georiënteerd wil werken? Dat is helemaal niet de kwestie. Ik wil dat de functieaanroepen na elkaar volgens zodra ze geheel voltooid zijn. Dat doen ze echter niet :(

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Wat is er precies mis met de door mij voorgestelde oplossing dan? Je moet wel via een omweg omdat je browser het tegelijkertijd initialiseren van twee van die XML objecten niet trekt. Het mooiste zou zijn om (zoals ik al zei) createTable een onload event te laten genereren, waar je dan die launchstuff functie aan knoopt. Alleen kan dit volgens mij niet in JavaScript omdat je zelf geen events kan genereren. :) Maar als iemand iets beters weet, dan houd ik mij aanbevolen :)

[ Voor 96% gewijzigd door BCC op 03-10-2004 17:45 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Verwijderd

Misschien kan je hier wat mee:
http://lxr.mozilla.org/se...e/content/xml/tests/load/

Daar staat wel een mooie constructie.
Pagina: 1