2010-02-06 6 views
12

In meinem Dokument habe ich dieses Skript:

$.ajax({ type:"POST",url:"ajax.php",data:data, 
    success: function() { 
     //onsuccess 
    }, 
    error: function() { 
     //onerror 
    } 
}); 

Wie kann ich in dem Dokument ajax.php, absichtlich einen Fehler melden? Reicht es aus, einfach einen 400 HTTP Status Code oder sowas zu werfen? (Und wenn ja, ist 400 der richtige?)

Warum ich frage ist, dass ich dies verwenden, um ein Formular an den Server zu senden, und wenn ein Feld nicht richtig ausgefüllt wird, möchte ich warnen der Benutzer durch den Fehlerparameter in $.ajax. Ich weiß, dass ich dies in erster Linie mit Javascript tun könnte, aber ich hoffe, ich könnte es so machen (also muss ich die Verifizierung nicht zweimal schreiben). Aber natürlich kann ich auf diese Weise die verschiedenen Felder nicht voneinander trennen.

Nach dem, was ich es benutzen wollen, benutzen kann ich werfen irgendwie eine „individuelle Fehler“, so dass, wenn das Feld nicht richtig ausgefüllt name wurde, den Namen des Feldes zurückgibt (dh name). Ist es ausreichend, so etwas zu tun:

In ajax.php:

if (isFilledOutProperly($name) == false) { 
    echo "name"; 
} 
else { 
    echo "success"; 
} 

Und:

success: function(data) { 
    if (data == 'name') { 
     //error 
    } 
      else { 
     //success 
    } 
}, 

ich hier auf dem Holzweg sein kann, aber wenn jemand einen besseren Vorschlag hat Wie ich das machen kann, bitte sag es mir. Vielen Dank!

Antwort

11

Die error Klausel von $.ajax() Anrufe ist nicht wirklich für den Umstand, auf den Sie sich beziehen. error behandelt Fälle von, sagen wir, HTTP-Fehlern. Validierungsfehler sind in diesem Fall nicht wirklich Fehler. Sie sind besser dran, wenn Sie im Callback success die entsprechenden Daten angeben, die vom Server zurückgegeben werden.

Wenn man sich die documentation aussehen:

error(XMLHttpRequest, textStatus, errorThrown)Function 

Eine Funktion, die aufgerufen werden, wenn der Antrag ausfällt. Der Funktion werden drei Argumente übergeben: Das XMLHttpRequest-Objekt, eine Zeichenfolge, die den Typ des aufgetretenen Fehlers und ein optionales Ausnahmeobjekt beschreibt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (neben Null) sind "timeout", "error", "notmodified" und "parsererror". Dies ist ein Ajax Event.

Hinweis: die Fehlerbedingungen es darüber spricht, sind Parse-Fehler, Timeouts, Fehler (HTTP) und kann nicht geändert (das ist eine andere HTTP-Antwort).

Technisch ist Ihre Anfrage erfolgreich, aber die Validierung schlägt fehl, was kein Fehler per se ist.

+3

Gemäß dem REST-Prinzip bedeutet die Reaktion auf eine POST-Anfrage mit HTTP 200, dass die Ressource erfolgreich erstellt wurde. Sie können mit einem HTTP 400 antworten und detaillierte Informationen über den Fehler im Format text/html/json/xml bereitstellen. – Leventix

+0

Ich weiß das, aber wie ich gefragt habe: Ich kann absichtlich den "Fehler" -Teil von '$ werfen.ajax() 'durch Erzwingen eines HTML-Fehlers? – Eikern

+0

Ja, wenn Sie mit einem anderen als HTTP 2xx antworten, wird der "error" -Teil aufgerufen. – Leventix

Verwandte Themen