molily: Die Energie des Verstehens

Beitrag lesen

  		success: function(rueckgabe) {  
  			if(rueckgabe != 'true') {  
  				alert('Es ist ein Fehler aufgetreten.')  
  			}  

Das sieht sehr eigenartig aus.
Ich bin im Umgang mit dem XHR-Objekt bzw. dessen Jquery-Äquivalent ajax() nicht so firm, aber die Deklaration einer Funktion mit einem Parameter namens rueckgabe, der *in die Funktion hinein* übergeben wird, kommt mir verdächtig vor.
Zweitens ist es vermutlich falsch, mit einem String zu vergleichen; vermutlich meinst du die boolsche Konstante true.
Und drittens ist es -vorausgesetzt, ich liegen mit Punkt zwei richtig- Unfug, einen boolschen Wert, der nur true oder false sein kann, nochmal explizit mit dem Wert true zu vergleichen, um dann true oder false herauszubekommen.

Man kann nur den Kopf schütteln, was für eine Kompetenz hier im Forum versammelt ist. Anstatt sich mal selbst in die Materie hineinzufuchsen (XMLHttpRequest, »Ajax«, jQuery), sich gesichertes Wissen anzueignen und Dinge kurzerhand auszuprobieren, werden Vermutungen und Unverständnis verbreitet. Mit dieser fatalen Mischung kann man wunderbar Besserwissen und Herumkritteln.

Wie wäre es z.B. mit Nachschlagen in der jQuery-Dokumentation zu $.ajax()? http://api.jquery.com/jQuery.ajax/
»success(data, textStatus, XMLHttpRequest)  Function
A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the 'dataType' parameter; a string describing the status; and the XMLHttpRequest object«
Von welchem Typ der erste Parameter ist, hängt vom MIME-Typ der Serverantwort ab, üblicherweist ist es ein HTML- oder Plain-Text-String. JSON ginge auch. Siehe Data Types ebenda.

Übrigens ist if (wert) und if (wert == true) tatsächlich etwas anderes in ECMAScript, wenn wert nicht vom Typ Boolean ist. (Andernfalls ist es zwar unnötiger Code, aber nicht schädlich.) Zur Erklärung: if (wert) führt ToBoolean(wert) aus, während wert == true den »Abstract Equality Comparison Algorithm« startet. Dieser wandelt (zusammengefasst) beide Werte in Number um.
if ("true") ergbt true, denn Boolean("true") ergibt true, weil jeder nicht-leere String true ergibt.
if ("true" == true) ergibt false, denn Number("true") ergibt NaN, Number(true) ergibt 0, und NaN == 0 ergibt false.
Insofern wäre es tatsächlich nicht zielführend, einen Boolean mit dem String "true" zu vergleichen. Da käme nämlich in beiden Fällen false heraus (bei der negativen Variante mit != entsprechend immer true).

Noch ein unverzichtbarer Link für sämtliche JavaScript-Erklärungen:
ECMA-262 5th Edition in HTML Format

Mathias