【发布时间】:2014-03-31 14:05:46
【问题描述】:
所以,当用户输入电子邮件时,我正在检查电子邮件是否存在。
$('form.recover-form#check-form').on('submit', function(e){
var form = $(this),
input = $('.check-recover-email'),
span = $('.recover-error'),
email = input.val();
span.text('');
e.preventDefault();
$.ajax({
url: 'ajax/check-email',
async: 'false',
cache: 'false',
type: 'POST',
data: {email: email},
success: function(response) {
if ( response == 'no' ) {
span.text('email does not exist');
} else if ( response == 'ok' ) {
form.submit();
}
}
});
});
php代码
if ( Input::isPost('email') ) {
$email = Input::post('email');
$check = $dbh->prepare(" SELECT * FROM users WHERE email = :email ");
$check->execute(array( 'email' => $email ));
echo ( $check->rowCount() == 1 ) ? 'ok' : 'no' ;
}
这样,只要我提交它提交的表单并且 AJAX 调用中的 e.PreventDefault() 不起作用。但是,如果我将e.PreventDefault() 放在 AJAX 调用之前,则表单不会提交,并且如果电子邮件不存在则会出现错误(这是我想要实现的)。
我不明白问题出在哪里,希望你能帮忙。
谢谢。
EIDT:这是更新后的代码
【问题讨论】:
-
你不能这样做,因为 ajax 请求的异步特性......
-
就像你做的那样把它放在请求之外..
-
e.preventDefault();不起作用,因为 ajax 是异步调用。请进行 ajax 同步或使用回调来实现此目标
-
这里的事情流程有点混乱。实际发生的是,他们的用户提交了触发在后台运行的 ajax 请求的表单。当该请求返回时,您尝试取消提交事件,但为时已晚,它早就完成了。
-
是的,我知道 preventDefault() 在 ajax 调用中不起作用,但是如果我在 ajax 之前将其向上移动,我该如何恢复提交并继续提交表单如果 ajax通话成功?
标签: php jquery ajax preventdefault