JavaScript: Globale Variable nicht abrufbar

Ich rufe mittels AJAX eine PHP-Datei auf, die einen Text zurückliefert, der von der Handler-Funktion in eine globale Variable geschrieben werden soll. Lasse ich mir die Variable innerhalb der Handler-Funktion ausgeben, besitzt sie den richtigen Wert. Jedoch sowohl in einer anderen Funktion der selben JS-Datei, als auch im JavaScript-Code weiter unten in der HTML-Datei besitzt die Variable keinen Wert.

[code]function ajaxRequest(url, options)
{
this.url = url;
this.method = (options.method) ? options.method : ‘GET’;
this.query = (options.query) ? options.query : null;
this.func = (options.onComplete) ? options.onComplete : null;
this.req = (window.XMLHttpRequest)
? new XMLHttpRequest()
: ((window.ActiveXObject)
? new ActiveXObject(‘Microsoft.XMLHTTP’)
: false);
}

ajaxRequest.prototype.dorequest = function() {
this.req.open(this.method, this.url, true);
if (this.method == ‘POST’)
{
this.req.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
}

var this_obj = this;
var func = this.func;

this.req.onreadystatechange = function() {
	if (this_obj.req.readyState == 4 && this_obj.func != null)
	{
		this_obj.func(this_obj.req.responseText, this_obj.req.responseXML);
	}
}
this.req.send(this.query);

}

var scriptPath = ‘./…/scripthandling/’;

function getLanguage(langSet, lang)
{
var url = scriptPath + ‘language.php?ls=’ + langSet + ‘&l=’ + lang;

var http = new ajaxRequest(url, {
		method:'GET',
		onComplete:getLanguage_handler});
http.dorequest();

/*document.write(language);

if(language)
{
	var current_lang = language;
	language = false;
	return current_lang;
}
else
{
	var urlKeys = new Array();
	var urlValues = new Array();
	var urlParts = url.split('?');
	urlParts[1]	= urlParts[1].split('&');
	
	for (var i = 0; i < urlParts[1].length; i++)
	{
		urlParts[1][i]	= urlParts[1][i].split('=');
		urlKeys[i]		= urlParts[1][i][0];
		urlValues[i]	= urlParts[1][i][1];
	}
	
	return urlValues[1];
}*/

}

function getLanguage_handler(text, xml)
{
if (text)
{
window.language = text;
}
}[/code]

[code]{L_GO_TO_ARTICLE}

[/code]

Ich verstehe hier einfach nicht, wo das Problem liegt. Auch im Internet konnte ich zu dem Problem nichts finden, was für mich von Relevanz wäre.

Ajax wird hier asynchron ausgeführt, bei deinen document.write ist das Ergebnis noch nicht verfügbar. Entweder du machst deine Aktionen im eventhandler oder setzt einen synchronen Requst ab.

Danke für deine Antwort erst einmal. Das habe ich mir auch schon überlegt und eine Schleife laufen lassen, die erst abbricht, wenn language nicht false ist. Allerdings hat auch das keinen Erfolg gebracht - das Skript hat ist in diesem Fall in eine Endlosschleife geraten.

Mit solchen Schleifen bringst du jeden Browser zum sterben, deine Möglichkeiten hab ich oben genannt. Warum nimmst du keinen synchronen Request ?
Um zu sehen ob dein Request erfolgreich ist kannst du auch ein Klick auf ein Button legen.

Ich habe synchrone Request bisher versucht, zu umgehen, da ich in diesem Fall die Methode umschreiben müsste. Allerdings habe ich das jetzt mal ausprobiert und das ganze funktioniert tatsächlich einwandfrei.

Dennoch ist es mir ein Rätsel, warum die globale Variable zuvor selbst beim Warten in einer Schleife nicht nach einer Zeit ihren Wert geändert hat. Ich könnte mir vorstellen, dass Problem darin liegt, dass der Wert der Variable während der Laufzeit der Funktion geändert werden soll.

So in etwa.

Da JavaScript nicht „parallel“ läuft, ist deine Endlos-Schleife auch gleichzeitig alles, was überhaupt noch läuft.
Code außerhalb dieser Schleife, der die Variable ändern könnte, kommt gar nicht mehr zur Ausführung.

Damit hast du im Grunde das gleiche Problem - ein synchroner AJAX-Request blockiert so lange, bis er fertig ist (die Antwort eingetroffen ist), sämtliche anderen Scripte auf der Seite, im Worst Case sogar das UI.