在凭据不匹配时阻止登录表单(AJAX)(返回false不起作用)

时间:2012-12-18 10:28:21

标签: javascript ajax forms form-submit

这是我的表格:

 <form name="loginform" method="POST" action="login" onsubmit="return validateLogin()">            
<div>  User Name  :<input class="input" name="username" type="text" /> </div> 
<div> Password  :<input class="input" name="password" type="password" /> </div>        
<div> id="yaha" style="color:red;font:bold 16px garamond"</div>                         
<input style="font-weight:bold;" type="submit" value="Login" />

javascript代码如下所示:

function validateLogin()
{
var x1=document.forms["loginform"];
if(//validations)
      {
       return false;
      }
 else
{    goajax(x1.username.value,x1.password.value);}        
 }//validate login ends...

var requ = null;

function goajax( u,  p)
{
requ=new XMLHttpRequest();
//code for posting ajax data
requ.onreadystatechange=display;

} 
function display()
{
if(requ.readyState == 4)
{
    if(requ.status == 200)
    {
    var message = requ.responseText;
    alert("message==="+message);
    var x;
    if(message.trim() == "ok")
        {
        var x1=document.forms["loginform"];
        return true;
        }
        else if(message.trim() == "no")
        {
        document.getElementById('yaha').innerHTML="Invalid Username or Password!!!";
        x1.password.value="";
        return false;
        }
        else if(message.trim() == "nv")
        {
        document.getElementById('yaha').innerHTML="Account not Activated";
        return false;
        }
    }     
}

}

我的问题是:我正在根据需要从服务器获取响应,但是如果出现不需要的响应,表单即使在“return false”之后也会提交。 (见功能显示())

请向下滚动到功能显示()我不希望在消息为“no”或“nv”时提交表单。基本上“返回假”不起作用

3 个答案:

答案 0 :(得分:2)

另一种方法是cancel the default event(在这种情况下是提交)

像这样:

function validateLogin(e)
{
var x1=document.forms["loginform"];
if(//validations)
      {
       e.preventDefault();
       return false;
      }

答案 1 :(得分:0)

请参阅:jQuery preventDefault();

尝试使用jQuery发布(如果您在网站中使用它)

答案 2 :(得分:0)

我在当前使用jQuery的项目中做了很多这样的事情:

$('#form')。submit(function(){

call_function_to_validate_and_submit(); 返回false;

});

每当我有javascript错误(语法或其他)时,即使验证失败,表单也会被提交(就像在没有ajax的普通html表单中一样)。我的观点是,你可能会在某处出现语法错误。