globale Varibalen in JS

Soapp

Erfahrenes Mitglied
Hi Profis,

ich habe folgende Codestruktur:
Ich hole per SQL vom Webserver ein XML.
Ist es leer, erhöhe ich die ID um eins um den nächsten Datensatz zu holen.
Allerdings bleibt id immer bei 1
Warum ist das so ?

Danke

Soapp

PHP:
                var id=0;
		function manufacturer(id)
      		   {	
		          id+=1;
		         alert(id)
		         ..................
       			XMLHttpRequestObject.onreadystatechange = statusaenderung();
	 	   }

		function statusaenderung()
		{ 
				....
				var manuf_exists = alle_tags[0].childNodes.length;
				if (manuf_exists==0)
                                     {
                                         manufacturer(id);
                                     } 
                                 else
				{  } //Ausgabe
		  } 


<body onload="manufacturer(id)">
<input type="submit"  value="Nächster Datensatz" onclick="manufacturer(id)"/>
 
Zuletzt bearbeitet:
Hi,

schwierig zu sagen, warum id nicht erhöht wird.

Ändert sich der Wert von id auch nicht, wenn Du den Button erneut drückst? Sollte sie in diesem Fall erhöht
werden, könnte der Fehler darin begründet liegen, dass manuf_exists und damit die Länge der Kindknoten
nicht gleich Null sind. Die Funktion würde dann nicht erneut aufgerufen werden.

Ciao
Quaese
 
Hallo Soapp,
kannst du nicht aus der Variablen id eine globale Variable machen und die dann in der Funktion inkrementieren? Also:
Code:
id=0;
function manufacturer() {    
  id += 1;
  alert(id);
  ..................
}
 
Code:
XMLHttpRequestObject.onreadystatechange = statusaenderung();
...es mag so aussehen, als ob dies eine Zuweisung von statusaenderung() an den onreadystate-Event wäre, ist es aber nicht....die Klammern hinter dem Funktionsnamen müssen weg.

Ansonsten: gib mal in allen Funktionen einen alert() aus, damit du einen Überblick darüber hast, ob und was ausgeführt wird.
 
hela hat gesagt.:
Hallo Soapp,
kannst du nicht aus der Variablen id eine globale Variable machen und die dann in der Funktion inkrementieren? Also:
Code:
id=0;
function manufacturer() {    
  id += 1;
  alert(id);
  ..................
}


Ich dachte eine Variable ist global, wenn Sie ausserhalb einer Funktion definiert wird
Stimmt das nicht

Soapp
 
hela hat gesagt.:
Ja doch, aber du willst sie ja auch bearbeiten.

hm, ich sehe aber den Unterschied zwischen deiner und meiner Version nicht, ausser
dass bei dir bei der globalen Variable kein "var" davorsteht.

Was übersehe ich gerade ?


Soapp
 
Hi.
Soapp hat gesagt.:
hm, ich sehe aber den Unterschied zwischen deiner und meiner Version nicht, ausser
dass bei dir bei der globalen Variable kein "var" davorsteht.

Was übersehe ich gerade ?
Die Parameterübergabe. Wenn du eine globale Variable "id" hast, und du nennst den Parameter der Funktion auch "id", dann wird innerhalb der Funktion die globale Variable vom Parameter verdeckt und du änderst nur den Wert des Parameters und nicht den Wert der globalen Variablen.

Gruß
 
deepthroat hat gesagt.:
...und du änderst nur den Wert des Parameters und nicht den Wert der globalen Variablen.
Genau. Nach deinem Codeschnipsel übergibst du die globale Variable id der Funktion, der Paramater wird funktionsintern (also lokal) bearbeitet und dann aber nicht wieder an die globale Variable zurückgegeben.
 

Neue Beiträge

Zurück