PDA

Volledige versie bekijken : XML updates niet zichtbaar


ferryhelmich
%Europe/Berlin %616 %2007, 14:47
Hallo allemaal,

Ik ben voor een dj een website aan het maken. De pagina's in de website worden gevuld met gegevens uit xml bestanden.
Het probleem is, dat op het moment dat het xml-bestand gewijzigd word, dit niet zichtbaar is in je browser, totdat de bestanden verwijderd worden in de "Temporary Internet Files" map. Hoe kan ik dit voorkomen?

groeten,

Ferry

sander1
%Europe/Berlin %803 %2007, 19:17
Je kunt dit voorkomen door bepaalde cache headers mee te zenden (vanuit PHP bijvoorbeeld). Wat je ook kunt doen is bij het ophalen van de XML file een random iets meegeven waardoor de browser denkt dat het steeds een ander bestand is. Bijvoorbeeld: data.xml?rand=12345 waarbij je dan 12345 random laat genereren.

ferryhelmich
%Europe/Berlin %892 %2007, 21:25
Dat laatste voorbeeld wat je noemt met: data.xml?rand=12345

Hoe zou ik dat dan in mijn code zoals hij hieronder staat kunnen toepassen?

var nNoticias:XML = new XML();
nNoticias.ignoreWhite = true;
nNoticias.load('paginas/news.xml');

sander1
%Europe/Berlin %918 %2007, 22:01
Zo zou je dat kunnen doen:// Random nummer genereren tussen de 10000 en 99999
var rand:Number = Math.round(Math.random()*(99999-10000))+10000;

var nNoticias:XML = new XML();
nNoticias.ignoreWhite = true;
nNoticias.load('paginas/news.xml?rand='+rand);

ferryhelmich
%Europe/Berlin %869 %2007, 20:52
Ahhh very nice, that solved the problem.

Ik dank u!

mvdpeet
%Europe/Berlin %665 %2007, 15:57
Hey,
Ik heb precies hetzelfde probleem en heb deze oplossing geprobeerd, maar dan krijg ik de melding dat ie het bestand niet kan vinden omdat er ineens rand23423 achterstaat.
Mis ik soms iets?

alvast bedankt
groetjes
Mark

sander1
%Europe/Berlin %668 %2007, 16:02
Hey,
Ik heb precies hetzelfde probleem en heb deze oplossing geprobeerd, maar dan krijg ik de melding dat ie het bestand niet kan vinden omdat er ineens rand23423 achterstaat.
Mis ik soms iets?Check even of je "bestand.xml" en "rand" scheidt met een vraagteken: bestand.xml?rand=12345
Gebruik je toevallig rewrite rules (htaccess) of iets dergelijks?

mvdpeet
%Europe/Berlin %501 %2007, 12:02
Ik heb de code precies zo gekopieerd als je had voorgedaan, maar ik krijg deze melding:
Error opening URL "file:///D|/Flash/projects/nieuwe%20afastv/xml/atv(45-54).xml?rand=41551"
Kan het liggen aan het feit dat ik dit lokaal test?

Alvast bedankt,
groetjes Mark

mvdpeet
%Europe/Berlin %533 %2007, 12:47
Hey

Ik heb het nog even getest en online werkt het inderdaad wel. Allleeeen... hij blijkt toch nog z'n array gevuld te hebben en alleen de nieuwe geladen items te vervangen, maar de overigen laat ie gewoon staan. Ook als ik de xml helemaal op nieuwe aanroep op de volgende manier:

cat1.onRelease = function(){
trace("blaat");
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = laadXML;
xml.load('xml/bc.xml?rand'+rand);
}

cat2.onRelease = function(){
trace("blaat");
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = laadXML;
xml.load('xml/atv.xml?rand'+rand);
}


Ik ga er vanuit dat ik dan in mijn laadXML functie wat arrays moet leegdonderen, alleen weet ik niet zo goed hoe :S

Dit is het begin van de laadXML functie:

function laadXML(){
var numOfItems:Number;
var button;
var earl;
var info;
var nodes = this.firstChild.childNodes;
numOfItems = nodes.length;
var spacing=271;
for (var i=0; i<numOfItems; i++){
button = holder.item.duplicateMovieClip("item"+i,i);
button._xscale = 0;
button._yscale = 0;
button.naam = nodes[i].attributes.desc;
button.omschrijving = nodes[i].attributes.info;
button.url = nodes[i].attributes.url;
button.titel.text = nodes[i].attributes.desc;
button.info.text = nodes[i].attributes.info;
_root.naam.text = nodes[0].attributes.desc;
_root.omschrijving.text = nodes[0].attributes.info;
button._x = 134 + ((i%3) * spacing);
button._y = 62 + (Math.floor(i/3)*132);
var t5:Tween = new Tween(button, "_xscale", Elastic.easeOut, button._xscale, 100, 1, true);
var t6:Tween = new Tween(button, "_yscale", Elastic.easeOut, button._yscale, 100, 1, true);
mcl.loadClip(nodes[i].attributes.earl, button.foto);
button.t.text = nodes[i].attributes.desc;
button.onRollOver = over;
button.onRollOut = out;
button.onRelease = function(){
overAFASTV._alpha = 0;
ns.play(this.url);
_root.naam.text = this.naam;
_root.omschrijving.text = this.omschrijving;
aanUit = 1;
cp.btnPauze._visible = true;
}

Als iemand me zou kunnen vertellen hoe ik dit moet oplossen zou dat helemaal super zijn.

Alvast bedankt,

groetjes
Mark

mvdpeet
%Europe/Berlin %629 %2007, 15:05
Aargh... ik word gek! Heb nu ook geprobeerd met removeMovieClip, maar ten eerste verwijdert ie niks en ten tweede blijft m'n xml zich vullen...

Ziehier de ellende...
http://www.afas.tv/mpetest/index.html

mvdpeet
%Europe/Berlin %506 %2007, 12:09
Eureka! Ik heb het opgelost. Het zat em toch in de removeMovieClip en na nog even struinen op het ff forum heb ik wel wat bruikbaars gevonden.

Ik begin in met laadXML functie nu eerst met het 'resetten' van oa mijn holderpositie. Vervolgens ga ik alle movieclips verwijderen. Het probleem was dat ik dat eerst deed op basis van NumOfItems, maar als er in de eerste xml 50 filmpjes stonden en in de 2e maar 5, dan ging ie natuurlijk maar 5 clips verwijderen. Ik heb nu alleen hard in de code een aantal gezet wat ie verwijderd. Er zal nog wel een oplossing zijn hiervoor, die bijvoorbeeld controleert of het aantal items uit de vorige xml meer of minder was, maar ik ben allang blij dat ik het heb gevonden. Ik hoop dat iemand nog wat heeft aan mijn ge-emmer.

function laadXML(){
var resetUnderline:Tween = new Tween(underline, "_x", Strong.easeOut, underline._x, 56 , 1, true);
var resetHolder:Tween = new Tween(holder, "_y", Elastic.easeOut, holder._y, 454, 1, true);
for (var t=0; t<65; t++){
_root.holder['item'+t].removeMovieClip();
_root['PagNum' + t].removeMovieClip();
}
var max:Number
var numOfItems:Number;
var button:Array = new Array();
var nodes:Array = new Array();
var earl;
var info;
nodes = this.firstChild.childNodes;
numOfItems = nodes.length;
var spacing=271;
for (var i=0; i<numOfItems; i++){
button = holder.item.duplicateMovieClip("item"+i,i);
button.naam = nodes[i].attributes.desc;
button.omschrijving = nodes[i].attributes.info;

bedankt voor de hulp

groeten Mark