如何从 ajax 回调中控制表单提交
How do I control form submission from within ajax callback?
我最初在我的 ajax 回调中有return true/false
,并意识到它可能不在正确的上下文中调用,所以我重写了我的函数如下,但它仍然不起作用。提交变量是否也没有从回调函数中传递? 确认(if .btn-danger
)有效,但不仅仅是如果您点击提交并且不需要确认)
$('#form').submit(function(e){
var submit = false;
if($('.btn-danger').length){
submit = true;
} else {
$.ajax({
url: base_path+"ajax/myajaxfile",
type: "post",
data: {
data1 : $("#amount").val(),
data2 : $("option:selected").val()
},
dataType: "json",
success: function(data) {
if (data.needconfirmation === 'true'){
$('#edit-submit').val("Confirm");
$('#edit-submit').removeClass("btn-primary");
$('#edit-submit').addClass("btn-danger");
$('#payment-form').after('<span class="warning"> Do you really wanna?</span>');
} else {
submit = true;
}
},
error: function(data) {
alert("an error has occurred");
}
});
}
if (submit){
return true;
} else {
return false;
}
});
我认为您的问题是 ajax 调用默认情况下是异步的 - 因此在调用成功函数之前正在评估函数的返回值,因此提交变量仍然是假的。
您需要使 ajax 调用同步:
async: false
或者可能更好的是重组它。
第一次做AJAX最令人困惑的方面之一是异步部分。 使用普通的Javascript(至少是普通的jQuery),你可以像这样处理提交:
$('#form').submit(function(e){
var submit = /*Figure out if it was a success or not*/;
if (submit){
return true;
} else {
return false;
}
});
一个事件触发了一个提交,你确定它是否有效,然后你要么继续,要么不继续。
对于 AJAX 提交,"弄清楚它是否成功"步骤发生在正常流程之外。 这意味着您要做的总是返回 false;您还不知道是否要继续,所以不要继续。 您的 AJAX 回调(AJAX 调用选项中的"成功:"函数)是"找出"代码是否运行,并且您当前对"成功 = true"有正确的想法......除了当它解析时,你原来的提交函数已经结束了(你会返回 false)。
因此,您需要做的是修改您的成功处理程序以执行...无论您提交时通常会发生什么。 这可能像隐藏表单的 form.submit() 一样简单,也可能更复杂;我不知道你的应用程序。 希望这能给你一个基本的想法。
$.ajax
是异步的,因此在成功回调发生之前,代码的其余部分将继续,因此它设置submit = true
不会影响函数结束时的检查。
确认(如果.btn-danger)有效,但不仅仅是如果您点击提交并且不需要确认
你怎么知道是否需要确认? 您可能希望在其中添加检查.btn-danger
。
此外,您可以通过执行
return submit;
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 当所有输入文本字段都为空时,禁止表单提交,但当jquery中的任何字段不为空时允许提交
- setTimeOut AFTER jQuery表单提交
- 如何从 ajax 回调中控制表单提交
- 如何构造/控制表单提交的数据
- 如何使用漏洞控制在客户端验证期间防止表单提交
- JavaScript:表单提交前Ajax调用的控制逻辑