Zunächst einmal, ja ich weiß, es ist nicht die beste Art von Frage. Aber ich bin nicht wirklich sicher, wonach ich suchen sollte, um Referenzen zu finden. Wenn jemand einen Hinweis dafür hätte, wäre ich auch dankbar. Ich denke, es wäre eine Art Pattern-/Anti-Pattern-Referenz, aber ich bin mir nicht sicher, welche Keywords verwendet werden, um diejenigen zu finden, die anwendbar sind.AJAX-Anruf blockieren, was wäre die perferierte Lösung?
Was ich derzeit vor mir habe, ist ein Formular, in das ein Benutzer Daten eingeben und einreichen muss. Bevor der Benutzer das Formular abschickt, möchte ich einige Daten überprüfen, die einen Back-End-Anruf erfordern. Um dies zu tun (und das Senden zu blockieren) verwende ich eine jQuery und $.getJSON
/$.ajax
, um die Daten zu holen. Ich überprüfe es auch später noch einmal, wenn ich die Daten verarbeite. Es geht nur darum, dem Benutzer Feedback für seine Eingaben zu geben.
Ich bin mir nicht sicher, wann immer mein aktueller Ansatz ein guter ist. Ich bin nicht sicher, wie ich die Übermittlung blockieren und die Daten überprüfen würde, die ich von dem Anruf erhalte, indem ich einen asynchronen Anruf benutze oder wann immer ich es auf diese Weise tun sollte. Eine andere Möglichkeit wäre, das Formular abzuschicken, die Daten zu überprüfen und den Benutzer mit Informationen darüber, was falsch ist, zurück zum Formular zu bringen. Der Nachteil wäre, dass eine "schwere" Last notwendig ist.
- Also was könnte ich tun, um einen asynchronen AJAX-Aufruf zu verwenden, um die Übermittlung zu blockieren, bis ich die Daten verifiziert habe?
- Soll ich das überhaupt tun, oder soll ich das Formular einfach einreichen und bestätigen/ablehnen, bevor ich es zur Bearbeitung einschicke?
bearbeiten deutlich zu machen, es kein Duplikat ist:
Hier ist die aktuelle Funktion Eingangswerte verwende ich vor einreichen zu überprüfen. Wie Sie sehen können, wird die Übertragung nur abgebrochen/unterbrochen, wenn ein Fehler festgestellt wird. Ich verwende $.ajax
anstelle von $.getJSON
, da es blockiert. Normalerweise sollte dies keine großen Auswirkungen haben, da die Abfrage ziemlich schnell ist und das würde wahrscheinlich "gut genug" funktionieren, aber ich denke, dass es möglich sein sollte, dies zu verbessern.
$("form").submit(function(event){
abortSubmit = false;
telephonePattern = new RegEx("^[0-9, ,\\-,+]*$")
if(telephonePattern.test($("#inputTelephone").value) == false){
abortSubmit = true;
$("#helptext").text("The telephone field contains invalid numbers");
}
userExists = false;
$.ajax({
url: "<url>",
dataType: "json",
async: false,
data: { user: $("#inputUsername").value }
}).done(
function(json){
userExists = json;
}
)
if(userExists.length > 0){
abortSubmit = true;
$("#helptext").text("That username already exists!");
}
if(abortSubmit){
return false;
}
});
Mögliches Duplikat von [Wie kann verhindert werden, dass das Formular gesendet wird?] (Http://StackOverflow.com/questions/3350247/how-to-prevent-form-from-being-submitted) –
Sie können die Übermittlungsschaltfläche ausblenden , überprüfen Sie die Werte, wie der Benutzer schreibt und aktivieren/deaktivieren Sie die Schaltfläche Senden, wenn alle Backends-Anforderungen erfolgreich sind. Oder Sie könnten das gesamte Senden asynchron mit Ajax machen. Oder setze eine Art Variable. Sie haben viele Möglichkeiten. Versuchen Sie, nach der besten Nutzererfahrung zu suchen. – DanFromGermany
Danke @Shree, aber ich bin in der Lage, das Senden zu verhindern. Es ist mehr als Dan wies auf eine Benutzererfahrung oder Best-Practice-Frage. Ich weiß, dass dies nicht die beste Plattform dafür ist, aber ich bin mir nicht sicher, wohin ich sonst gehen würde. – Seth