我不确定我要去哪里。这个想法是在提交表单之前,输入字段之一通过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。
$.ajax
为了解决这个问题,您可以async: false为AJAX调用添加设置,但是这将暂停执行,直到AJAX调用返回。
async: false
另一个解决方案是创建一个隐藏输入,形式为valid:
valid
<input type="hidden" name="valid" value="false" />
然后在submit函数中但在ajax调用之前,创建对from的引用var $form = $(this)。然后,如果AJAX调用返回有效值,请更改此隐藏输入的值,然后再次提交表单:
var $form = $(this)
$('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; }