Javascript 如何在ajax回调后从主函数返回false?
我通过发出ajax调用并提供回调来执行编辑,以确保避免重复的电子邮件。如果存在重复项,我希望从submit事件返回false。有没有一种不设置async=false的优雅方法来实现这一点?我尝试的(请参阅emailCallback)不起作用 提交事件 编辑(包括提交处理程序的其余部分)Javascript 如何在ajax回调后从主函数返回false?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我通过发出ajax调用并提供回调来执行编辑,以确保避免重复的电子邮件。如果存在重复项,我希望从submit事件返回false。有没有一种不设置async=false的优雅方法来实现这一点?我尝试的(请参阅emailCallback)不起作用 提交事件 编辑(包括提交处理程序的其余部分) 为什么不在Ajax调用成功完成时提交表单,而不是传递回调呢 $("#form-accounts").on("submit", function (e) { // Always cancel the sub
为什么不在Ajax调用成功完成时提交表单,而不是传递回调呢
$("#form-accounts").on("submit", function (e) {
// Always cancel the submit initially so the form is not submitted until after the Ajax call is complete
e.preventDefault();
...
checkDupEmail(this);
...
});
function checkDupEmail(form) {
var data = {};
data.action = "validate-email";
data.email = $("#email").val();
ajax('post', 'php/accounts.php', data, function(result) {
if (parseInt(result) > 0) {
showMessage(0, "The email address is in use. Please supply another or login instead of creating a new account.")
} else {
form.submit();
}
}
}
比这更好的方法是使用Ajax提交表单。这将消除对服务器的两次调用。我认为在这些情况下,您必须始终使用
e.preventDefault()
然后在AJAX响应处理程序中,调用e.target.submit()
以提交有效的表单。在提交表单之前,我需要做其他事情。我需要做的是取消提交时,有一个重复的电子邮件。检查重复的电子邮件之前,表单提交。在访问者输入电子邮件后立即执行此操作(使用$('#电子邮件)。更改处理程序)。在这种情况下,只需将所有提交功能从事件处理程序移动到表单.submit()行之前。
$("#form-accounts").on("submit", function (e) {
// Always cancel the submit initially so the form is not submitted until after the Ajax call is complete
e.preventDefault();
...
checkDupEmail(this);
...
});
function checkDupEmail(form) {
var data = {};
data.action = "validate-email";
data.email = $("#email").val();
ajax('post', 'php/accounts.php', data, function(result) {
if (parseInt(result) > 0) {
showMessage(0, "The email address is in use. Please supply another or login instead of creating a new account.")
} else {
form.submit();
}
}
}