stringer: Problem mit Javascript und XMLHttpRequest

Hallo miteinander,
Mein Script liest mit der Funktion loadcoord per XMLHttpRequest eine Datei ein, trennt die Daten in Zeilen und speichert sie in dem Feld mySplitResult. Am Schluss wird das Feld der Funktion getdistance übergeben.

Leider geht aus ungeklärten Umständen der Inhalt von mySplitResult bei der Übergabe verloren. Wenn ich in der Funktion getdistance versuche, auf den Inhalt zuzugreifen, bekomme ich eine Fehlermeldung "mySplitResult is null" zurück.

Ich habe die Variable aber außerhalb der beiden Funktionen  definiert, also müsste sie doch dann eine globale Variable sein. In der Funktion loadcoord kann ich problemlos auf die Werte von mySplitResult zugreifen.

Leider bin ich in Sachen Programmieren ein Anfänger und ich komme einfach nicht auf den Fehler. Ich habe den Verdacht, dass es irgendwie mit dem Code zum einlesen der Datei zu tun hat. Diesen habe ich übernommen und angepasst, aber noch nicht völlig verstanden.

Ich hoffe auf eure Hilfe, denn ich weiss einfach nicht mehr weiter :(

var mySplitResult = null;  
function loadcoord(pfad){  
	  
	try {  
		// Mozilla, Opera, Safari sowie Internet Explorer (ab v7)  
		adrdata = new XMLHttpRequest();  
	} catch(e) {  
		try {  
			// MS Internet Explorer (ab v6)  
			adrdata  = new ActiveXObject("Microsoft.XMLHTTP");  
		} catch(e) {  
			try {  
				// MS Internet Explorer (ab v5)  
				adrdata  = new ActiveXObject("Msxml2.XMLHTTP");  
			} catch(e) {  
				adrdata  = null;  
			}  
		}  
	}  
	if (adrdata) {  
		adrdata.open('GET',pfad, true);  
		adrdata.onreadystatechange = function () {  
			if (adrdata.readyState == 4) {  
			  
				mySplitResult = adrdata.responseText.split("\n");  
				adrcount = mySplitResult.length;  
			}  
		}  
		adrdata.send(null);  
	}  
	getdistance(mySplitResult);  
}		  

  1. Hallo stringer,

    der Request in deinem Beispiel läuft asynchron:

    Diese Funktion wird erst aufgerufen, wenn der Request abgeschlossen ist:

      adrdata.onreadystatechange = function () {  
      	if (adrdata.readyState == 4) {  
      	  
      		mySplitResult = adrdata.responseText.split("\n");  
      		adrcount = mySplitResult.length;  
      	}  
      }  
      adrdata.send(null);  
    

    }

    aber diese Funktion wird sofort nach dem Absetzen des Requests aufgerufen

    getdistance(mySplitResult);
    }

    Gruß, Jürgen

  2. Hi,

    Leider geht aus ungeklärten Umständen der Inhalt von mySplitResult bei der Übergabe verloren.

    Dann klären wir mal den ungeklärten Umstand: Du hast nicht verstanden, was es bedeutet, einen *asynchronen* Request auszuführen.

    Wenn ich in der Funktion getdistance versuche, auf den Inhalt zuzugreifen, bekomme ich eine Fehlermeldung "mySplitResult is null" zurück.

    Natürlich - denn mit diesem Wert hast du die Variable initialisiert, und zu dem Zeitpunkt, wo du getDistance aufrufst, ist ihr Inhalt auch noch nicht geändert worden.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?