Can';t获取jquery表单验证以注册$.post元素
我想验证一个表单,这样我可以检查基本信息(如输入的用户名、用户名的最小长度等),但也可以确保用户名和电子邮件之类的内容尚未被验证(这需要数据库搜索) 我已经准备好了所有的部分,在仔细研究之后,我缩小了它的范围,发现Can';t获取jquery表单验证以注册$.post元素,jquery,ajax,forms,validation,submit,Jquery,Ajax,Forms,Validation,Submit,我想验证一个表单,这样我可以检查基本信息(如输入的用户名、用户名的最小长度等),但也可以确保用户名和电子邮件之类的内容尚未被验证(这需要数据库搜索) 我已经准备好了所有的部分,在仔细研究之后,我缩小了它的范围,发现$.post语句虽然是要添加到我的“fail”计数器中,但没有这样做。如何从$.post行中获得某种形式的输出,以便真正验证(因为现在,即使用户名不可用,它也会提交表单) 这是我的(不过为了简单起见,缩短了显示用户名的部分)。请注意,“usernameoff”是我的错误块: funct
$.post
语句虽然是要添加到我的“fail”计数器中,但没有这样做。如何从$.post
行中获得某种形式的输出,以便真正验证(因为现在,即使用户名不可用,它也会提交表单)
这是我的
(不过为了简单起见,缩短了显示用户名的部分)。请注意,“usernameoff”是我的错误块:
function validateForm()
{
// set variables
var username=document.forms["registrationnew"]["username"].value;
var usernamespace=username.indexOf(" ");
// set fail counter variable to determine if any requirements failed
var counter=0;
// check that username isn't blank, containing spaces, too short, or taken
if (username==null || username=="")
{
counter++;
$('#usernameoff').html("Must enter a username");
}
else if (username.indexOf(" ") >= 0)
{
counter++;
$('#usernameoff').html("Cannot contain spaces");
}
else if (username.length < 3)
{
counter++;
$('#usernameoff').html("Must be at least three characters");
}
else
{
$.post("check_username.php", {username: username}, function(result)
{
if(result == 0)
{
$('#usernameoff').html("Available");
}
else
{
counter++;
$('#usernameoff').html("Not available");
}
});
}
// if any test failed, return false
if (counter > 0)
{
document.getElementById("errorflag").innerHTML=counter;
return false;
}
}
函数validateForm()
{
//设置变量
var username=document.forms[“registrationnew”][“username”].value;
var usernamespace=username.indexOf(“”);
//设置失败计数器变量以确定是否有任何要求失败
var计数器=0;
//检查用户名是否为空、包含空格、太短或已被占用
如果(用户名==null | |用户名==“”)
{
计数器++;
$('#usernameoff').html(“必须输入用户名”);
}
else if(username.indexOf(“”>=0)
{
计数器++;
$('#usernameoff').html(“不能包含空格”);
}
else if(username.length<3)
{
计数器++;
$('#usernameoff').html(“必须至少包含三个字符”);
}
其他的
{
$.post(“check_username.php”,{username:username},函数(结果)
{
如果(结果==0)
{
$('#usernameoff').html(“可用”);
}
其他的
{
计数器++;
$('#usernameoff').html(“不可用”);
}
});
}
//如果任何测试失败,则返回false
如果(计数器>0)
{
document.getElementById(“errorflag”).innerHTML=计数器;
返回false;
}
}
$.post
执行查询以确定输入的用户名是否已被使用(并返回0或1)。我的问题是,无论返回哪个,它都不会增加“counter”,因此表单仍然提交 最终测试(if(counter>0)
)将在AJAX调用返回之前运行。这是AJAX的“异步”部分
在您的情况下,最简单的解决方案是用同步调用替换$.post
:
$.ajax({
type: "POST",
url: "check_username.php",
data: {'username': username},
async: false,
success: function(result) { /* ... */ }
});
这将导致脚本等待返回时出现延迟,但由于它位于您自己的服务器上,因此延迟应该相当小
(同步呼叫并不总是可能的。有关详细信息,请阅读文档。)非常感谢您,昨天这个问题让我非常痛苦,我刚刚用这种方法成功地尝试了一下。我正在编写我的第一个网站(参加了一个学期的编码课程,并发现了错误),所以这是一个很大的学习经验。再次非常感谢。