[GELÖST] AJAX Benutzerauflösung abspeichern geht nicht

Ich hab' keine Ahnung, wie das helfen soll. Auch wenn die Funktion "nachgelagert" ist, wird sie ausgeführt, bevor der AJAX-Request beim Server ankommen.

Meine starke Vermutung ist, dass du das Konzept der Trennung zwischen Client und Server und der Kommunikation/Ausführreihenfolge noch nicht 100%ig verstanden hast. Lese dich da mal tiefer ein.
 
Kurze Rückmeldung von mir: das geschilderte Vorgehen hat geklappt; keine Ahnung warum. Ich muss das Abfragen & Zuweisen der AJAX-Variablen mit der DB-query kapseln. Sobald ein IF-Zweig dazwischen war, funktionierte es nicht.
 
Ich muss das Abfragen & Zuweisen der AJAX-Variablen mit der DB-query kapseln. Sobald ein IF-Zweig dazwischen war, funktionierte es nicht.
damit kann kein mensch was anfangen.
beantworte mal #38 dann können wir dir sagen was dein problem ist.
und der
sobald ich allerdings folgende Struktur vornehme: ... Funktioniert es einwandfrei
teil aus #37 kann nicht einwandfrei funktionieren, weil aufloesung_Breite und aufloesung_Höhe nur (vernumpftig) gesetzt sind wenn du breite als get-parameter übergibst.

- - - Aktualisiert - - -

Ich hab' keine Ahnung, wie das helfen soll. Auch wenn die Funktion "nachgelagert" ist, wird sie ausgeführt, bevor der AJAX-Request beim Server ankommen.
damit meint er ein update der db nur mit breite und höhe durch den AJAX-Request.
 
Hi,

ich will das Thema nochmal aufgreifen, weil ich am gleichen Vorhaben sitze. Mir geht es um die Übergabe mehrerer Variablen an den XMLHttpRequest(), was nicht funktioiert (eine zu übergeben klappt):

In der Ausgangsdatei, die ich mit dem Request auch wieder aufrufe, steht im Body:
Code:
<script type="text/javascript">
var height = screen.height;
var width = screen.width;
setRequest(width);
</script>
sowie
PHP:
$width = $_POST['width'];
echo "<p>Die PHP-Width: ".$width."</p>";
$width = $_POST['height'];
echo "<p>Die PHP-height: ".$height."</p>";
Im Head steht die function:
HTML:
 <script type="text/javascript">
  <!--
	var request = false;

	// Request senden
	function setRequest(value) {
		// 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 = "admin_index.php?sid=56";
			// Request öffnen
			request.open('post', url, true);
			// Requestheader senden
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			// Request senden
/*			request.send();	 */
			request.send('height='+value+'&width='+value);			
/*				request.send('height='+value);
			request.send('width='+value);	 */		

					
			// Request auswerten
			request.onreadystatechange = interpretRequest;
		}
	}




	// Request auswerten
	function interpretRequest() {
		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);
				} else {
					var content = request.responseText;
					// den Inhalt des Requests in das <div> schreiben
					document.getElementById('content').innerHTML = content; 	
				
				}
				break;
			default:
				break;
		}
	}
	
	
  //-->
  </script>
Wie gesagt, mit einer Variablen (hier width) funktioniert es. Wie ich zwei (width, height) übergebe, weiß ich nicht. Es klappt nicht, bei SetReques() zwei Variablen in die Klammer einzugeben, wie ich das bei PHP machen würde. Also SetReques(height, width) ergibt = nichts! Hat jemand einen guten Tipp? Danke schon mal!
 
Zuletzt bearbeitet von einem Moderator:
Hi, sorrry - da steht noch der Code für nur eine Variable. Bin inzwischen etwas weiter gekommen. Ich poste, wenn es neue Probleme gibt.
 
So jetzt funktioniert es bestens. So geht's (wenn auch etwas tricky):

In meiner index.php steht im Head:
HTML:
   <script type="text/javascript">
  <!--
	var request = false;

	// Request senden
	function setRequest(height, width, availwidth, availheight) {
		// 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 = "<?php echo $_SERVER['SCRIPT_NAME']."?".$_SERVER['QUERY_STRING']; ?>"; 		
			// Request öffnen
			request.open('post', url, true);
			// Requestheader senden
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			// Request senden
			request.send('height='+height+'&width='+width+'&availwidth='+availwidth+'&availheight='+availheight);	 	

     		// Request auswerten
			request.onreadystatechange = interpretRequest;
		}
	}

	// Request auswerten
	function interpretRequest() {
		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);
				} else {
					var content = request.responseText;
					// den Inhalt des Requests in das <div> schreiben
					document.getElementById('content').innerHTML = content; 	
				}
				break;
			default:
				break;
		}
	}
  //-->
  </script>
Dann ist eine counter.php per include() eingebunden:
PHP:
<div style="display:none;" id="content">
</div>

<script type="text/javascript">
var height = screen.height;
var width = screen.width;
var availwidth = window.screen.availWidth;
var availheight = window.screen.availHeight;

setRequest(height, width, availwidth, availheight);
</script>

 <?php
$width = $_POST['width'];
$height = $_POST['height'];
$availwidth = $_POST['availwidth'];
$availheight = $_POST['availheight'];
weiter geht's in der counter.php mit dem Auslesen verschiedener Server-Infos. Dann wird alles in eine Datenbank eingetragen. Zwei Dinge sind tricky:

1. Der Container <div id="content"> hat die zusätzliche Style-Eigenschaft display:none; Sonst zerreißt es beim Ajax-Request durchs Nachladen die Seite.

2. Das ganze script läuft einmal durch (dabei sind dann "$width" usw. noch leer) und dann wird Ajax aktiv und das script läuft nochmal durch. Dem Besucher fällt das nicht auf, aber der DB. Die würde zwei Datensätze schreiben, wobei dem ersten die Werte für "$width" usw. fehlen. Das fange ich ab mit if (!empty($width)) {...dann INSERT INTO...}

Das ist jetzt sicher bisserl "gebastelt", aber es funktioniert.
 
Zurück
Oben