Ich versuche, das Front-End meiner Anwendung zu validieren. Ich habe Probleme mit dem Ajax-Anruf, den ich verwende, um herauszufinden, ob der Benutzer eine eindeutige E-Mail-Nachricht sendet.AJAX-Eindeutigkeitsprüfung funktioniert nicht auf Schienen App
Mein JS:
function appendResults(data) {
console.log(data);
if(data.message=='ERROR') {
$("#confirmation").html("");
var content = '<div class= "alert alert-danger">Este email ya se ha usado.</div>';
$("#confirmation").append(content);
}
else if ($('#name').val() == '' || $('#surname').val() == '' || $('#email').val() == ''|| $('#estanco').val() == '' || $('#picture').val() == '') {
$("#confirmation").html("");
var content = '<div class= "alert alert-danger">Debes rellenar todo el formulario.</div>';
$("#confirmation").append(content);
}
else {
$("#confirmation").html("");
var content = '<div class= "alert alert-success"><strong>Genial!</strong> Ya participas en el concurso.</div>';
$("#confirmation").append(content);
co
}
}
function handleSubmitEvent(e) {
var formURL = '/contestants/new';
var formData = $("#email").val();
$.ajax({
url: formURL,
type: "POST",
data: formData,
dataType: 'json',
success: appendResults,
error: function() {console.log('There was an error')}
});
console.log(formData);
}
function attachFormListeners(e) {
$('#listed').click(handleSubmitEvent);
}
$(document).ready(attachFormListeners);
Mein Controller:
def email_uniqueness
if Contestant.where(params[:email]).exists?
render json: {message: "SUCCESS"}
else
render json: {message: "ERROR"}
end
end
die 'Fehler' Nachricht selbst hält, die durch, wenn eine neue E-Mail gesetzt. Ich bin mir nicht sicher, wie ich es beheben kann.
Das einzige, was potenziell in das Modell verschoben werden könnte, ist ein Bereich, der Benutzer mit einer bestimmten E-Mail zurückgibt, aber angesichts der Tatsache, dass es einfach so oder über einen Finder ist, scheint es zu diesem Zeitpunkt nicht wert. Sie müssen trotzdem immer noch nach einer DuPe-E-Mail in der Validierung suchen, aber eine Plausibilitätsprüfung über Ajax scheint völlig in Ordnung zu sein, und Sie brauchen eine Controller-Aktion, um das zu tun. Nichts ist schwierig über Ajax über REST, nicht sicher, was Sie dort kommunizieren möchten. –
(Eigentlich, den Code wieder lesend, ist es nicht sofort offensichtlich, was passiert: Ich hatte angenommen, dies war eine Vorabüberprüfung, aber wenn es ist, wird es hier nicht gezeigt, also nichts gegen diesen Teil meines Kommentars.) –
Hahaha ! Die Verwendung einer 'email_uniqueness'-Aktion ist meiner Meinung nach nicht sehr RESTful. Die Validierung einzelner Felder kann nur mit 'create' und' update' und unter Verwendung der Modellvalidierung erreicht werden. – fbelanger