molily: Ajax: return() Problem

Beitrag lesen

Ursprünglich wurde das <div> mit der ID "hallo" direkt in Zeile 44 mit dem Ergebnis von req.responseText beschrieben- das hat funtionier. Wie gesagt das möchte ich vermeiden und den Wert lieber über'n  return() zurückgeben.

Wie gesagt arbeitet XMLHttpRequest sinnigerweise asynchron. Man arbeitet daher nicht mit Rückgabewerten, sondern mit sogenannten Callback-Funktionen. Das heißt, man übergibt eine Funktion, die aufgerufen wird, wenn die Serverantwort eingetroffen ist und die Daten zur Verfügung stehen.

function ajax(meth,ressource,sync)

function ajax (meth, ressource, callback)

{
  var r;
  var req = (window.XMLHttpRequest)
  ?
  new XMLHttpRequest() // für Gecko
  :
   ((window.ActiveXObject)
     ?
     new ActiveXObject("Microsoft.XMLHTTP")  // für IE
     :
     false
     );

// Request :  open( methode, URL, true bei asynchron false bei synchron)
  req.open(meth,ressource,sync)

// Zustand der Verbindung
  req.onreadystatechange = function()
  {
   //Anfrage erfolgreich
   if (req.readyState == 4)  // loadet, fertiggeladen siehe bei "Properties"
   {
    // Status der Antwort
    if (req.status == 200)
    {

callback(req.responseText, req);

}
   }
  }

req.send(null);
}

<body onload="schreib('GET','21_hallo.txt',true);">

Stattdessen übergibst du schreib eine Funktion als dritten Parameter:

window.onload = function () {
   schreib('GET', '21_hallo.txt', function (response) {
      document.getElementById("hallo").innerHTML = response;
   })
};

Diese Funktion erhält den responseText als ersten Parameter und verwendet ihn.

Vielleicht kennst du diese Schreibweise von Funktionen noch nicht, es handelt sich um sogenannte Funktionsausdrücke. So kannst du Funktionen einfach notieren (= Funktionsobjekte erzeugen) und diese z.B. einer anderen Funktion direkt als Parameter übergeben.

Mathias