Xml Aufruf abwarten

1manni1

Erfahrenes Mitglied
Also ich habe 2 xml Dateien.
In der ersten wir der Link zur 2. abgefragt.

Das sieht bis jetzt so aus:

Code:
var sellerid = "e-sells_de";
var totalitems = ""

var XMLdaten0 = new XML(); 
XMLdaten0.ignoreWhite=true; 
XMLdaten0.load("http://open.api.ebay.com/shopping?callname=FindItems&responseencoding=XML&appid=e-sellsG-15b5-4687-8fbb-3797e07f4157&siteid=77&version=517&sellerid=" + sellerid + "&MaxEntries=1"); 
XMLdaten0.onLoad = function(success) { 
	if(success){
		totalitems = XMLdaten0.firstChild.childNodes[5].childNodes[0];
	}
}

var XMLdaten = new XML(); 
XMLdaten.ignoreWhite=true; 
XMLdaten.load("http://open.api.ebay.com/shopping?callname=FindItems&responseencoding=XML&appid=e-sellsG-15b5-4687-8fbb-3797e07f4157&siteid=77&version=517&sellerid=" + sellerid + "&MaxEntries="+ totalitems + ""); 
XMLdaten.onLoad = function(success) { 
	if(success){
		anzahl = XMLdaten.firstChild.childNodes.length;
		endtime = [];
		galleryurl = [];
		currentprice = [];
		currencyid = [];
		titlename = [];
		
		for (var i=0; i<anzahl; i++){
			anzahl = XMLdaten.firstChild.childNodes.length;
			
			endtime[i] = XMLdaten.firstChild.childNodes[4].childNodes[1].childNodes;
			galleryurl[i] = XMLdaten.firstChild.childNodes[4].childNodes[3].childNodes;
			currentprice[i] = XMLdaten.firstChild.childNodes[4].childNodes[6].childNodes;
			currencyid[i] = XMLdaten.firstChild.childNodes[4].childNodes[6].attributes.currencyID;
			titlename[i] = XMLdaten.firstChild.childNodes[4].childNodes[9].childNodes;
			
			trace(titlename);			
		}		
	}	
}

Mein Problem weiß ich die 1. Abfrage dauert etwas Zeit und somit kann die 2. das Ergebnis nicht liefern nun wie schaff ich es nun das ich die 2. Abfrage erst mache wenn die 1. fertig ist
 
passt zwar nicht mehr ganz zum Thema ist aber denke ich auch ein kleiner Fehler:

Code:
var sellerid = "e-sells_de";
var totalitems = ""

var XMLdaten0 = new XML(); 
XMLdaten0.ignoreWhite=true; 
XMLdaten0.load("http://open.api.ebay.com/shopping?callname=FindItems&responseencoding=XML&appid=e-sellsG-15b5-4687-8fbb-3797e07f4157&siteid=77&version=517&sellerid=" + sellerid + "&MaxEntries=1"); 
XMLdaten0.onLoad = function(success) { 
	if(success){
		totalitems = XMLdaten0.firstChild.childNodes[5].childNodes[0];
		
		var XMLdaten = new XML(); 
		XMLdaten.ignoreWhite=true; 
		XMLdaten.load("http://open.api.ebay.com/shopping?callname=FindItems&responseencoding=XML&appid=e-sellsG-15b5-4687-8fbb-3797e07f4157&siteid=77&version=517&sellerid=" + sellerid + "&MaxEntries="+ totalitems + ""); 
		XMLdaten.onLoad = function(success) { 
			if(success){
				
				endtime = [];
				galleryurl = [];
				currentprice = [];
				currencyid = [];
				titlename = [];
				
				for (var i=0; i<totalitems; i++){
					endtime[i] = XMLdaten.firstChild.childNodes[i+4].childNodes[1].childNodes;
					galleryurl[i] = XMLdaten.firstChild.childNodes[i+4].childNodes[3].childNodes;
					currentprice[i] = XMLdaten.firstChild.childNodes[i+4].childNodes[6].childNodes;
					currencyid[i] = XMLdaten.firstChild.childNodes[i+4].childNodes[6].attributes.currencyID;
					titlename[i] = XMLdaten.firstChild.childNodes[i+4].childNodes[9].childNodes;
				}
			}	
		}
	}
}

Wenn ich totalitems ausgeben lasse in der 2. XML Abfrage bekomme ich 2 zurück allerdings klappt die for-Schleife damit nicht. Wieso? Wenn man totalitems = 2; oder totalitems = "2"; in der ersten XML Abfrage reinsetzt gehen die Schleifen wieder.:confused:
 
Kann ich aus der Ferne nur so vom Drüberlesen nicht sagen.
Ich persönlich lasse mir Inhalte von XML Knoten jedoch immer z.B. mit
Code:
inhalt = this.childNodes[nummer].firstChild.nodeValue;
ausgeben. Ohne das Hervorgehobene (das vor diesem kommt ja auf die Struktur an, ist also nur ein Beispiel) kommen ja die XML-Tags mit in die Ausgabe, oder? Daraus würde sich dann nur sehr umständlich eine Zahl bilden lassen.
Davon ging ich zumindest bis jetzt aus, lass mich aber gerne korrigieren, wenn's auch kürzer geht. :)

Gruß
Rena

PS: Und auch dann natürlich darauf achten, dass die Zählvariable der Schleife eine Zahl ist (bzw. entsprechend umgewandelt wird -> z.B. Number(String)) und keine Zeichenkette. Denn mit Strings zählt sich's schlecht. :)
 
Zuletzt bearbeitet:
Also wenn ich das so mache gibt er mir immer "null" aus.

Ähm ist ganz einfach nachzubauen^^ Nur der AS-code in das 1. Frame kopieren.
weiter bin ich auch noch nicht :)
 
Ähm ist ganz einfach nachzubauen^^ Nur der AS-code in das 1. Frame kopieren.
weiter bin ich auch noch nicht :)
Ohne die XML-Dateien dazu dürfte man da beim Nachbauen wenig Ausgaben zu erwarten haben.
Irgendwelche XML-Ausgaben externer Anbieter kann man damit auch nicht nachvollziehen. Vielleicht liegt der Fehler ja auch im Zugriff auf Inhalte oder Attribute? Ich nehme an, du erwartest nicht, dass jemand für dich recherchiert, was wie und wo in der XML irgendeines Dritten steht.
Wie gesagt: Aus der Ferne... konkretere Beispiele, die eben das Problem beinhalten, wären hilfreicher. Bau doch einfach mal eigene Beispiel-XMLs in der Struktur, wie sie von Ebay kommen. Die dürfte dir ja bekannt sein und dann hat man was zum Testen ohne ins Blaue des WWW und dessen Anbieter stochern zu müssen.
 
Zuletzt bearbeitet:
Hi ok sry. Hab mich gestern auch noch ein bisschen drangesetzt und weitergemacht :)

Also die Bilder sollten eigentlich auch in der Höhe auf 115 Pixel gemacht werden. Aber irgendwie sind das niemals 115 Pixel. Und dann noch eine Frage wie schaffe ich das ganze als Panorama zu machen. Also das das banner links und rechts läuft :)

Und zu guter letzt noch vielen Dank an dich das du dich bemühst mir zu helfen :)
 

Anhänge

  • gallery.zip
    61,8 KB · Aufrufe: 18
Zuletzt bearbeitet:
Wie oben schon gesagt...
Code:
totalitems = Number(XMLdaten0.firstChild.childNodes[5].firstChild.nodeValue);
Ansonsten hast du ein Teil vom XML-Objekt, aber weder String noch Zahl. Und Number hier nochmal sicherheitshalber, damit klar ist, dass es eine Zahl sein soll.

Größen (_height -> mit Unterstrich davor übrigens) lassen sich erst dann zuordnen, wenn das Bild geladen ist. Quasi via Preloader, eben nur zum Abfragen, nicht unbedingt zum Anzeigen des Ladefortschritts.

Und das Panorama machst mal schön selbst. ;)
Da dürfte es hier unter verschiedenen Suchbegriffen auch einiges an Material geben. Und für die ersten Versuche (zum Verstehen) vielleicht nicht gleich probieren, das in einem komplexen Projekt umzusetzen, sondern erst mal für sich z.B. mit importierten Bildern und dann nach und nach weiter lernen.

Gruß
Rena
 
Zuletzt bearbeitet:
Thx das klappt nun :)

So das Problem hab ich damit erkannt. Also muss man einen Preloader einbauen oder?

Das habe ich mal versucht. Somit sieht die 2. for Schleife dann so aus.

Code:
				for (var i=0; i<totalitems; i++){
					_root.pano.attachMovie("bild", "bild"+i, i);
					_root.pano["bild"+i]._x = i*110;
					_root.pano["bild"+i].img.loadMovie(galleryurl[i], i);
					_root.onEnterFrame = function(){
						var prozent = int(this.pano["bild"+i].img.getBytesLoaded()*100/ _root.pano["bild"+i].img.getBytesTotal());
						if(prozent >= 100){
							delete this.onEnterFrame;
							_root.pano["bild"+i]._height = 115;
							_root.pano["bild"+i]._xscale = _root.pano["bild"+i]._yscale;
							_root.pano["bild"+i].i = i
								
							_root.pano["bild"+i].onRollOver = function(){
								_root.endtimetf.text = "Dieses Angebot endet am: " + endtime[this.i];
								_root.price.text = "Der aktulle Preis beträgt: " + currentprice[this.i] + " " + currencyid[this.i];
								_root.titlenametf.text = titlename[this.i];
							}
							
							_root.pano["bild"+i].onRelease = function(){
								getURL(viewitem[this.i], _blank);
							}
						}
					}
				}

Allerdings gibt es dort nen Fehler und zwar hier:

this.pano["bild"+i].img.getBytesLoaded()

Wenn ich mir das ausgeben lass kommt immer undefined. Ich denke irgendetwas ist mit dem Pfad falsch aber ich komm nicht drauf. :(

Die Panorama Funktion kann auch erstmal warten zuerst müssen mal die Bilder eingelesen werden ;) :)
 
Zurück