如何以正确的方式处理 submit() 中的 ajax 响应?
How to handle ajax response within a submit() in a proper way?
您将如何执行 ajax-调用并在 submit() - 代码块中接收响应?(以正确的方式)
如果你有一个带有提交事件的表单,你可以在验证时这样做
/* contact page */
$(".contactform").submit(function(e) {
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
return true; //Do submit form
}
现在我必须在我的验证 (recaptcha) 中包含来自服务器 (ajax-call) 的响应,但是因为 ajax-call 是异步执行的,即使有响应,表单也会被提交来自服务器的不是预期的,因为函数 return 在 ajax 调用完成之前为真。
我对 ajax-call 或 response 没有问题,但我不确定如何在不使用 async: false 的情况下实现 return true, false。
我基本上想要这样的东西:
/* contact page */
$(".contactform").submit(function(e) {
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
var recaptchafield_is_valid = {response from server (ajax-call)}
if (recaptchafield_is_valid === false) {
return false;
}
return true; //Do submit form
}
我也试过$.when()
但是后来表单也提交了,因为没有设置true或false并且表单正常提交。
我也试过使用 e.preventDefault() 然后 $(".contactform").submit() 成功了但是 $(".contactform").submit(function(e) {
陷入了递归循环。
处理这个问题的方法是在提交事件中总是 return false,然后在验证码 ajax 调用的成功事件中,以编程方式提交表单,绕过提交事件处理程序。
$(".contactform").submit(function(e) {
var form = this;
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
// do the ajax
$.ajax({
url : '...',
success : function(){
// if the captcha is good, submit the form
form.submit();
}
});
return false;
}
注意:form.submit()
正在调用 DOM 元素的提交方法,而不是 jQuery 提交处理程序。
您将如何执行 ajax-调用并在 submit() - 代码块中接收响应?(以正确的方式)
如果你有一个带有提交事件的表单,你可以在验证时这样做
/* contact page */
$(".contactform").submit(function(e) {
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
return true; //Do submit form
}
现在我必须在我的验证 (recaptcha) 中包含来自服务器 (ajax-call) 的响应,但是因为 ajax-call 是异步执行的,即使有响应,表单也会被提交来自服务器的不是预期的,因为函数 return 在 ajax 调用完成之前为真。
我对 ajax-call 或 response 没有问题,但我不确定如何在不使用 async: false 的情况下实现 return true, false。
我基本上想要这样的东西:
/* contact page */
$(".contactform").submit(function(e) {
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
var recaptchafield_is_valid = {response from server (ajax-call)}
if (recaptchafield_is_valid === false) {
return false;
}
return true; //Do submit form
}
我也试过$.when()
但是后来表单也提交了,因为没有设置true或false并且表单正常提交。
我也试过使用 e.preventDefault() 然后 $(".contactform").submit() 成功了但是 $(".contactform").submit(function(e) {
陷入了递归循环。
处理这个问题的方法是在提交事件中总是 return false,然后在验证码 ajax 调用的成功事件中,以编程方式提交表单,绕过提交事件处理程序。
$(".contactform").submit(function(e) {
var form = this;
var companyfield = $(this).find(".companyfield").val();
if (parseInt(companyfield) === 0 || !companyfield) {
return false;
}
// do the ajax
$.ajax({
url : '...',
success : function(){
// if the captcha is good, submit the form
form.submit();
}
});
return false;
}
注意:form.submit()
正在调用 DOM 元素的提交方法,而不是 jQuery 提交处理程序。