Hilfe bei einem Script zu XMLHttpRequest...

Tapi

Grünschnabel
Hi

Ich versuche die ganze Zeit mich an einem Script zu XMLHttpRequest.
Grundsätzlich funktioniert es aber ich kann nicht mit dem Ergebnis weiter
arbeiten...
Habe mir schon das open Book von Galileo angesehen und so manchen Beitrag hier
im Forum aber eine Lösung Habe ich nicht wirklich gefunden :(


Ajax Code
Code:
<html>
<head>
<title>AJAX</title>
<script type="text/javascript">
<!--
function anfrage(url){
if (window.XMLHttpRequest) {
   http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
   http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
   http.open("GET", url, true);
   http.onreadystatechange = ausgeben;
   http.send(null);
}
}

function ausgeben() {
   if (http.readyState == 4) {
      var Satz =
         http.responseText;
	  var Woerter = Satz.split("||");
  	  alert (Woerter); // diese ausgeb erscheint
   }
}

	alert(anfrage("fahrzeuge.php")); // diese ausgabe ist undefiniert?
//--></script>
</head>
<body>
</body>
</html>

Datei die angefunkt wird
Code:
<?php
include("include/session.php"); 
$reg_num_data = $database->getNumFahrzeuge();
$a .= $reg_num_data."||";
for($count = 1; $count <= $reg_num_data;)
{
	$req_data = $database->getFahrzeuge($count);
	$a .= $req_data[1];
	$a .= ("||");
	$count++;
}
echo $a;
?>

das wird ausgelesen
Code:
2||AA-BB 213|| CC-DD 123||



für jede hilfe bin ich dankbar...
Matthias
 
Welche Ausgabe erwartest du denn anstelle von "undefined"? Die Funktion "anfrage()" liefert ja keinen Wert zurück und zum Ausgeben der Antwort des Servers hast du ja "ausgeben()" implementiert.
 
Jetzt verstehe ich gar nichts mehr...

Ich dachte das ich mit dem Aufruf --> anfrage("fahrzeuge.php")
das Script starte welches dann die funktion --> ausgeben()
startet und mir dann eben die Werte zurück gibt...
 
Du sagst in deinem Skript, dass bei Änderung des status, also z.B. wenn der Server antwortet, die Funktion "ausgabe()" ausgerufen wird. Das funktioniert ja auch und dein alert() gibt den korrekten Wert aus.
Die Funktion "anfrage()" hat aber kein "return" und der Rückgabewert kann nur "undefined" sein.
 
Ok habe nun das Script so aufgebau


Code:
<html>
<head>
<title>AJAX</title>
<script type="text/javascript">
<!--
function anfrage(url){
if (window.XMLHttpRequest) {
   http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
   http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
   http.open("GET", url, true);
   http.onreadystatechange = function () {
   if (http.readyState == 4) {
      var Satz =
         http.responseText;
	  var Woerter = Satz.split("||");
  	  return Woerter;
   }
}
   http.send(null);
}
}
alert (anfrage("fahrzeuge.php"));
//--></script>
</head>
<body>
</body>
</html>

aber das Ergebnis ist das selbige...
 
Du scheinst den Ablauf nicht ganz zu verstehen. So wie du es dir vorstellst, müsste das Skript an der Stelle "alert (anfrage("fahrzeuge.php"));" hängen bleiben, bis der Server antwortet. Aber die Funktion "anfrage()" wird komplett ausgeführt und irgendwann wird dann die Funktion aufgerufen, welche du bei "onreadystatechange" definiert.

Du musst einfach das was gemacht werden soll, wenn der Request fertig ist, in die onreadystatechange-Funktion packen.
 
Ich scheine wirklich auf dem Schlauch zu stehen.
Also ich verstehe jetzt das mein alert nicht angezeigt werden kann weil zu diesem Zeitpunkt das Ergebnis noch nicht zu verfügung steht.
Was ich jetzt nicht verstehe... was noch gemacht werden muß... und in die function rein soll damit mein alert erfolg hat.

Ich hoffe ich beanspruche deine Nerven nicht all zu sehr aber bis zu diesem Problem kam ich ganz gut klar.
 
Du willst ja mit dem Ergebnis deines Requests weiter arbeiten(Ausgeben, Berechnungen machen, weitere Requests). Ruf einfach anfrage() auf und verarbeite in der onreadystatechange-Funktion das Ergebnis.
 
Danke jetzt ist der Groschen gefallen.
Ich dachte immer ich muß mit dem Rückgabewert arbeiten... aber das ist natürlich quatsch. Statt dessen muß ich in der function alles weitere machen, da anschließend ja wieder zurück zu dem Punkt des aufrufes gesprungen wird.

Danke noch einmal für die Geduld...

Matthias
 
Zurück