小编典典

如果ajax验证程序使用jquery返回true,则提交表单

ajax

我不确定我要去哪里。这个想法是在提交表单之前,输入字段之一通过ajax发送到服务器端验证器。如果响应为1,则输入有效且应提交表单。如果响应为0,则不应提交该表单。问题是我不知道如何在ajax请求函数中设置一个变量,以防止表单被提交。这就是我所拥有的:

$("#form").submit(function() {
    var valid= false;
    var input = $("#input").val();
    $.ajax({
       type: "POST",
       url: "validator.php",
       data: "input=" + input,
       success: function(msg){
            valid = (msg == 1) ? true : false;
            if(!valid) {
                $("#valid_input").html("Please enter valid info");
            } else {
                $("#valid_input").html("");
            }
       }
     });
    return valid;
 });

阅读 230

收藏
2020-07-26

共1个答案

小编典典

问题在于$.ajax请求是异步的,需要一段时间才能完成。因此,该函数会继续执行并在成功执行事件之前返回false。

为了解决这个问题,您可以async: false为AJAX调用添加设置,但是这将暂停执行,直到AJAX调用返回。

另一个解决方案是创建一个隐藏输入,形式为valid

<input type="hidden" name="valid" value="false" />

然后在submit函数中但在ajax调用之前,创建对from的引用var $form = $(this)。然后,如果AJAX调用返回有效值,请更改此隐藏输入的值,然后再次提交表单:

$('input[name="valid"]').val('true');
$form.submit();

然后,在submit函数的最后,如果隐藏输入的值为true,则仅返回false:

if ($('input[name="valid"]').val() == 'false') {
    $.ajax({ ... }); // changes the value of the hidden input from false to true
    return false;
}
2020-07-26