javascript - 如果使用 jquery ajax 验证器返回 true,则提交表单

标签 javascript jquery ajax forms

我不知道我哪里错了。这个想法是,在提交表单之前,输入字段之一通过 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;
 });

最佳答案

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

要解决此问题,您可以将 async: false 添加到 AJAX 调用的设置中,但这会暂停执行,直到 AJAX 调用返回。

另一个解决方案是在名为 valid 的表单中创建一个隐藏输入:

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

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

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

然后在提交函数结束时,如果隐藏输入的值为 true,则仅返回 false:

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

关于javascript - 如果使用 jquery ajax 验证器返回 true,则提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597675/

相关文章:

javascript - 隐藏 ionic 菜单按钮不起作用

具有类型和默认值的 Javascript 方法

jquery - Laravel Ajax 请求 $request 空结果

javascript在后台加载url

使用 knockout.js 的 JavaScript TreeView

javascript - 如何使用 jquery 弹出第一个数组元素?

jquery - 轮播指示器不适用于 Bootstrap

jquery - Twitter Bootstrap Scrollspy 在滚动时不起作用

javascript - Post 方法抛出错误

php - 使用 Ajax 将 Javascript 变量传递给 PHP