johnnyjohnny: Variablen im AJAX Request

Hallo Zusammen,
der folgende Code Auszug stellt den AJAX Request dar, wie man ihn überall auf dem Internet findet. Ich habe ihn nun allerdings um 4 variablen modifiziert; indem sowohl die Zieldatei (bspw. create_user.php), das zu verändernde div (hier: dynamic_element) und 2 weitere Variablen übermitteln kann.
Nun aber mein Problem; seitdem ich versucht habe verschiedene divs durch dynamic_element zu verändern, geht das skript plötzlich nicht mehr. Hat jemand eine Idee warum? Irgendwie scheint die funktion interpretRequest keine Variablen zu akzeptieren.

Besten Dank,
johnny

  
<script type="text/javascript">  
  <!--  
	var request = false;  
  
	// Request senden  
	/*  
	 *value --> zu übermittelnder Wert  
	 *direction --> Zieldatei  
	 *post_var --> variable für $_POST  
	 */  
	function setRequest(direction, dynamic_element, value1, value2, value3) {  
		// Request erzeugen  
		if (window.XMLHttpRequest) {  
			request = new XMLHttpRequest(); // Mozilla, Safari, Opera  
		} else if (window.ActiveXObject) {  
			try {  
				request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5  
			} catch (e) {  
				try {  
					request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6  
				} catch (e) {}  
			}  
		}  
  
		// überprüfen, ob Request erzeugt wurde  
		if (!request) {  
			alert("Kann keine XMLHTTP-Instanz erzeugen");  
			return false;  
		} else {  
			var url = direction;  
			// Request öffnen  
			request.open('post', url, true);  
			// Requestheader senden  
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
			// Request senden  
			request.send('value1'+'='+value1+'&'+'value2'+'='+value2+'&'+'value3'+'='+value3);  
			// Request auswerten  
			request.onreadystatechange = interpretRequest(dynamic_element);  
		}  
	}  
  
	// Request auswerten  
	function interpretRequest(which_element) {  
		switch (request.readyState) {  
			// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen  
			case 4:  
				if (request.status != 200) {  
					//alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status); --> stresst USER eher  
				} else {  
					var content = request.responseText;  
					// den Inhalt des Requests in das <div> schreiben  
					document.getElementById(which_element).innerHTML = content;  
				}  
				break;  
			default:  
				break;  
		}  
	}  
  //-->  
  </script>  

P.S. Kommentar im Skript ist zum Teil überholt.

  1. Hi,

    Nun aber mein Problem; seitdem ich versucht habe verschiedene divs durch dynamic_element zu verändern, geht das skript plötzlich nicht mehr.

      request.onreadystatechange = interpretRequest(dynamic\_element);  
    

    Hiermit rufst du die Funktion *direkt* an dieser Stelle einmalig auf.
    Vorher stand da sicher nur der Funktionsname, *ohne* Klammern - damit wurde lediglich die Referenz auf die Funktion übergeben, ohne sie direkt aufzurufen.

    Bspw. mit einer "anonymen" Funktion kannst du dir hier helfen:

    request.onreadystatechange = function() {  
                                   interpretRequest(dynamic_element);  
                                 }
    

    Der Ausdruck function() { ... } gibt ebenfalls eine Funktionsreferenz zurück, die du dem Event readystatechange zuweisen kannst.
    Und in dieser Funktion wird dann, wenn sie später aufgerufen wird, deine Funktion interpretRequest mit dem Parameter dynamic_element aufgerufen.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Perfekt, vielen Dank! Da hat sich wohl gezeigt, dass ich mich nie ernsthaft mit Javascript beschäftigt habe.

      1. Hi,

        Da hat sich wohl gezeigt, dass ich mich nie ernsthaft mit Javascript beschäftigt habe.

        Dann könnte ich dir den SELFHTML Aktuell Artikel Organisation von JavaScripten von Mathias Schäfer empfehlen.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.