Javascript-Funktion mit JQuery ajax - Funktion undefined zurückgibt
Kann jeder geben mir einen Anhaltspunkt, warum dies nicht funktioniert? Die Funktion undefined zurückgibt. Alarmiert es ein boolean-Werten, aber immer noch undefined zurück?!
Dank
function IsUniqueEmail() {
var email = $("#<%=EmailAddress.ClientID%>").val();
if (email.length > 0) {
$.ajax({
url: 'handlers/validator.ashx',
dataType: 'json',
data: { "n": "email", "v": email },
async: false,
success: function(data) {
alert(eval(data.success));
return eval(data.success);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
return true;
}
});
}
}
$(document).ready(function() {
var execScript = $(".buttonStep1").attr("href").replace("javascript:", "");
$(".buttonStep1").attr("href", "#").click(function() {
//Add before click logic here
var IsOk = IsUniqueEmail();
if (IsOk) {
$("#EmailAddressInUseMessage").hide();
eval(execScript);
}
else {
$("#EmailAddressInUseMessage").show();
}
});
});
dies ist die Antwort des ajax-Aufrufs
{ "success": false, "error" : "ERROR_EMAILINUSE" }
eval
ist nicht eine gute Praxis...- Vereinbart, ich war immer verzweifelt, wenn ich versuchte, die eval-Anweisung 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ausführung von Skript-Pfad bei Verwendung von AJAX ist nicht linear. Ihre
IsUniqueEmail
verlassen, bevor der AJAX-Anfrage hat eine Antwort empfangen, Rücksendung nichts.Was Sie zurückgeben, ist an
$.ajax
, das ist die Methode, mit der Berufung aufsuccess
, und dort wird es vermutlich ignoriert.Könnten Sie schreiben Sie Ihre Codes in dieser Weise:
In dieser Weise, wird die Schaltfläche klicken, beginnt die Anfrage geht es nicht voran gehen und etwas anderes tun. Nach, dass Sie alles tun, Ihre Magie in der AJAX-Antwort:
Kann man nicht tun, es auf diese Weise.
IsUniqueEmail();
werden zurück vor der Ajax-Aufruf beendet. Es ist asynchrone! Sie haben, um die Logik in Ihrer callback-Funktion:Wenn Sie die Daten festlegen, die Art, wie JSON, Sie nicht zu verwenden
eval
analysieren.data
bereits ein Objekt. Und selbst wenndata.success
enthält eine Zeichenfolge, vergleichen Sie es mit einem string anstelle der Verwendung von eval:data.success == 'true'
.Hinzufügen, um andere Antworten, was Sie tun können, ist, dass Sie brauchen, um zu speichern das Ergebnis der ajax-Aufruf in eine variable, die hat den Umfang Ihrer IsUniqueEmail Funktion. Ihre Ajax-Erfolg zurück rufen kann access die variable und update es (mit Hilfe von closure). Nach dem Ajax-Aufruf abgeschlossen ist, können Sie wieder die aktualisierte variable (da es nicht async).