Anzeige

xml datei alle 30 sekunden auslesen


#1
Hi leute habe mal ne kurze frage:
ich lass in flash ne xml datei auslesen und zwar so :

Code:
 var xmlloader:URLLoader = new URLLoader();
 xmlloader.addEventListener(Event.COMPLETE, parseXML);
 xmlloader.load(new URLRequest("URL"));

 function parseXML(evt:Event):void
 {
 var xml:XML = XML(xmlloader.data);
 xml.ignoreWhite = true;

 image_txt.text = xml.mount[0].stream;
 song_txt.text = xml.mount[0].song;
 }
jetzt will ich das diese datei alle 30 sekunden noch mal abgefragt werden oder wenn der inhalt der datei geändert also quasi als intervall..

kann mir da jemand vll weiterhelfen.?

LG
Bilal
 

CPoly

Mitglied Weizenbier
#2
Ich bin kein Flash Programmierer, aber da es praktisch mit JavaScript identisch ist, würde ich so tippen:

Code:
function loadXML() {
    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(evt:Event):void
    {
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;
    }
}

setInterval(loadXML, 30000);
Edit: Oder besser wäre es, mit setTimeout zu arbeiten und das zu starten, sobald der letzte Aufruf abgearbeitet ist. Sonst kommst du in Bedrängnis, wenn der Server mal länger mit der Antwort brauch.
 
#3
Edit: Oder besser wäre es, mit setTimeout zu arbeiten und das zu starten, sobald der letzte Aufruf abgearbeitet ist. Sonst kommst du in Bedrängnis, wenn der Server mal länger mit der Antwort brauch.
Danke für deine schnelle antwort könntest du mir auch vll zeigen wieder das mit dem setTimeout funktionieren würde und was der unterschied zu dem interval wäre..?

LG
Bilal
 

CPoly

Mitglied Weizenbier
#4
setInterval läuft ununterbrochen in genau dem festgelegten Abstand. Die Problematik ist, dass das Herunterladen deiner Datei nicht deterministisch ist. Der Server kann nicht erreichbar sein oder das Laden kann mal eine Minute dauern. setInterval weiß davon nichts und löst ständig weiter die Funktion aus und die behindern sich gegenseitig, es kann auch zu race conditions kommen.

setTimeout wird einmalig ausgeführt. Also solltest du einfach nach dem vollständigen Abarbeiten des Dokumentes den Timer starten.

Code:
function loadXML() {
    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(evt:Event):void
    {
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;

        //Wir haben alles abgearbeitet, ab JETZT 30 Sekunden warten
        setTimeout(loadXML, 30000);
    }
}

//Aller erster Aufruf, der alles lostritt 
loadXML();
 

CPoly

Mitglied Weizenbier
#6
Welche Flash Version benutzt du?

Geht es so?

Code:
_global.setTimeout(loadXML, 30000);
Oder laut Dokumentation mit Timern (sind aber scheinbar relativ neu). http://help.adobe.com/en_US/FlashPl...sh=cs5&filter_flashplayer=10.2&filter_air=2.6

Code:
var timer:Timer = new Timer(30000, 1);
timer.addEventListener(TimerEvent.TIMER, loadXML);

function loadXML() {
    timer.reset();

    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(evt:Event):void
    {
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;
 
        //Wir haben alles abgearbeitet, ab JETZT 30 Sekunden warten
        timer.start();
    }
}
 
//Aller erster Aufruf, der alles lostritt 
loadXML();

Ich hab keinen Actionscript Compiler installiert und kann deshalb selbst nur probieren.
 
#7
Benutze Adobe Flash Professional CS5 " Actionscript 3 "
musste den timer umbennen weil ich die funktion timer schonmal verwende

PHP:
var xtimer:Timer = new Timer(30000, 1);
xtimer.addEventListener(TimerEvent.TIMER, loadXML);
 
function loadXML() {
    xtimer.reset();
 
    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(evt:Event):void
    {
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;
 
        //Wir haben alles abgearbeitet, ab JETZT 30 Sekunden warten
        xtimer.start();
    }
}
 
//Aller erster Aufruf, der alles lostritt 
loadXML();
beim exportieren kommt kein fehler.. Aber nach den 30 sekunden hehehe ich blick ehrlich nicht mehr durch hahahaha

Code:
ArgumentError: Error #1063: Argument count mismatch on Mp3Player/loadXML(). Expected 0, got 1.
	at flash.utils::Timer/_timerDispatch()
	at flash.utils::Timer/tick()
 
#8
hab das probleme gelöst :)

PHP:
var xtimer:Timer = new Timer(30000, 1);
xtimer.addEventListener(TimerEvent.TIMER, loadXML);
 
function loadXML(e:Event=null):void{  // (e:Event=null):void{ GEÄNDERT
    xtimer.reset();
 
    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(e:Event=null):void{   // (e:Event=null):void{ GEÄNDERT
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
		
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;
 
        //Wir haben alles abgearbeitet, ab JETZT 30 Sekunden warten
        xtimer.start();
    }
}
 
//Aller erster Aufruf, der alles lostritt 

loadXML();
VIELEN VIELEN DANK FÜR DEINE HILFEEE ******

LG
BILAL
 

CPoly

Mitglied Weizenbier
#9
Ich nehme an, dass loadXML als Parameter ein Event-Objekt übergeben bekommen, weil es ja beim "TIMER" event ausgeführt wird. Am einfachsten ist es, du schaltest noch eine Funktion dazwischen.

Code:
var xtimer:Timer = new Timer(30000, 1);
xtimer.addEventListener(TimerEvent.TIMER, onTimer);
 
function onTimer(evt:TimerEvent) {
    loadXML();
}

function loadXML() {
    xtimer.reset();
 
    var xmlloader:URLLoader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, parseXML);
    xmlloader.load(new URLRequest("URL"));
 
    function parseXML(evt:Event):void
    {
        var xml:XML = XML(xmlloader.data);
        xml.ignoreWhite = true;
 
        image_txt.text = xml.mount[0].stream;
        song_txt.text = xml.mount[0].song;
 
        //Wir haben alles abgearbeitet, ab JETZT 30 Sekunden warten
        xtimer.start();
    }
}
 
//Aller erster Aufruf, der alles lostritt 
loadXML();
Edit: War wohl zu langsam.
 
Anzeige
Anzeige