Hannes: Problem mit Ajax-Anfrage

Beitrag lesen

Ich habe noch mal was zusammengehackt. Dein Code sah etwas sehr unübersichtlich aus, das halbe Dutzend Abfragen, wo denn das XMLHttpRequest herkommen möge, "aussagekräftige" Funktionsargumente à la a, b und c, zwei Funktionen, wo eine reichen täte.
Davon unabhängig solltest du Daten, so es keinen ausdrücklich Grund für GET gibt, immer per POST senden. Das Senden von Daten in der URL (also per GET) hat gravierende Nachteile, die URL ist in Art und Umfang beschränkt, vor allem aber landet eine URL immer in diesem oder jenem Protokoll - das ist mit der letzte Ort, an dem du verantwortungsvollerweise ein Passwort sehen möchtest.

Im nachfolgenden Skript hast du für die Serveranfrage genau eine Funktion, die du aufrufen musst. Sie erzeugt für jede Anfrage ein eigenständiges XMLHttpRequest-Objekt und bekommt neben der URL ein Objekt, in dem die zu sendenen Daten stehen, und je eine Funktionen, die bei Erfolg bzw. Fehlschlag aufgerufen wird.

function POST(url, daten, erfolg, fehler)  
{  
   var r;  
   if (window.XMLHttpRequest) {  
      r = new XMLHttpRequest();  
   }  
   else if (window.ActiveXObject) { // IE <= 8  
      r = new ActiveXObject("Microsoft.XMLHTTP");  
   }  
   if (!r) {  
      return false; // irgendeinen Fehler melden  
   }  
  
   r.open("post", url, true);  
   r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
   r.onreadystatechange = function () {  
      if (r.readyState == 4) {  
         if (r.status == 200) {  
            erfolg(r);  
         }  
         else {  
            fehler(r)  
         }  
      }  
   }  
  
   var p = "";  
   for (k in daten) {  
      p += "&" + encodeURIComponent(k) + "=" + encodeURIComponent(daten[k]);  
   }  
  
   r.send(p);  
}  
  
function geht(r)  
{  
   console.log("Erfolg.", r);  
}  
  
function steht(r)  
{  
   console.log("Ging daneben.", r);  
}  
  
// Aufrufen:  
  
POST("irgendwohin.php", { benutzer: "Hans", passwort: "Franz" }, geht, steht);  
  
// oder so  
  
var nutzer = { benutzer: "Hans", passwort: "Franz" };  
POST("irgendwohin.php", nutzer, geht, steht);  
  
// oder so  
  
var nutzer = { benutzer: "Hans", passwort: "Franz" };  
POST("irgendwohin.php", nutzer, function (r) {  
      console.log("Toll:", r);  
      benutzeristangemeldet();  
      seitetun();  
   },  
   function (r) {  
      console.log("Bockmist.", r);  
   },  
);  
  

Die Daten empfängst du PHP-seitig in $_POST.

Das Ganze ist sicher noch verbesserungs- und ausbaufähig, sollte aber als Grundlage ausreichen.