2017-06-23 213 views
0

我在表单检查空场后,发送空的数据,只有当所有的领域都充满的web2py没有Ajax调用为什么不断刷新页面

$(document).ready(function() { 
var $normalClass=$(".normalClass"); //input fields class 
var $username=$("#username"); 
var $password=$("#password"); 
var $email=$("#email"); 
var emptyField=1; //keeping track of empty fields in the form 


$("#submit").click(function(){ 
var emptyField=0; 
$normalClass.each(function() { 
    if($(this).val()===""){ 
     emptyField++; 
     $("#formSU").submit(function (evt) { 
      evt.preventDefault(); 
     }); 
     $(this).after("<p class='errorClass2'>This field is required.</p>"); 
    } 
}); 
if(emptyField==0) { 
    alert("all filled"); 
    $.ajax({ 
     url: "dbQuery", 
     data: { 
      username: $username.val(), 
      password: $password.val(), 
      email: $email.val() 
     }, 
     success: function() { alert("success");     
     }, 
     type: 'POST' 
    }); //end ajax 
} 

起初送,我还以为是因为我没在提交事件之前没有声明emptyField的值,ajax将继续发送空数据。但是在给它一个非0的形式之后,刷新后仍然发送该表单。我甚至在提交事件内部并且只有在没有空字段时才将Ajax调用。 我做错了什么,以及如何让代码更易于阅读? 编辑:添加HTML,控制器和框架:

<div class="ftable"> 
<form method="post" id="formSU"> 
<input type="text" class="normalClass" id="username" name="username" placeholder="Username"><br> 
<input type="password" class="normalClass" id="password" name="password" placeholder="Password"><br> 
<input type="checkbox" id="checkBox"> 
<label for="checkBox">Show password</label></br> 
<input type="email" class="normalClass" id="email" name="email" placeholder="Email"><br> 
<input data-w2p_disable_with="Submit" type="submit" value = "Submit" id="submit"> 
</form> 
</div> 

控制器:

def signup(): 
db.user.insert(username=request.vars.username, 
password=request.vars.password,email = request.vars.email) 
return dict() 
+0

请注意,即使表单页面首次加载(在提交表单之前),您的控制器也会在db.user中插入一条记录 - 在这种情况下,所有字段值将为“无”。此外,您的Ajax URL是一个相对URL,因此它实际上指向当前页面的URL,并附加了“dbQuery”(例如,如果当前页面URL是/ default/signup,Ajax请求将转到/ default /注册/的DBQuery)。在这种情况下,“dbQuery”将是request.args [0]的值,而不是控制器函数的名称。此外,您的表单不包含CSRF保护。 – Anthony

+0

如果您想通过Ajax提交表单,更好的方法是将表单放入[Ajax组件](http://web2py.com/books/default/chapter/29/12/components-and-plugins #组件 - 负载和阿贾克斯)。您还应该使用'SQLFORM'来处理表单处理和数据库插入(如果需要,您仍然可以在视图中使用自定义HTML)。如果您需要这些帮助,请咨询Google群组。 – Anthony

回答

0

试试这个剪断,如果u HV任何查询PLZ评论。我认为method: 'POST'而不是type: 'POST'

$(document).ready(function() { 

    // when form submit 
    $("#formSU").submit(function(){ 

    var $normalClass=$(".normalClass"); //input fields class 
    var $username=$("#username"); 
    var $password=$("#password"); 
    var $email=$("#email"); 

    var errors = []  

     if($username.val() == "") 
     { 
     errors.push({ ele : $username, 
        msg : "<p class='errorClass2'>This field is required.</p>"   
        }); 
     //return false; // prevents form submitting 
     } 
    if($password.val() == "") 
     { 
     errors.push({ ele : $password, 
        msg : "<p class='errorClass2'>This field is required.</p>"   
        }); 
     //return false; // prevents form submitting 
     } 
    if($email.val() == "") 
     { 
     errors.push({ ele : $email, 
        msg : "<p class='errorClass2'>This field is required.</p>"   
        }); 
     ///return false; // prevents form submitting 
     } 

    if(errors.length) 
    { 
    for(var i=0;i<errors.length;i++) 
    { 
     var o = errors[i]; 
     o.ele.after(o.msg); 
    } 

    return false; 
    } 



     // if reaches here means all filled 
      $.ajax({ 
       url: "dbQuery", 
       data: { 
        username: $username.val(), 
        password: $password.val(), 
        email: $email.val() 
       }, 
       success: function() { alert("success");     
       }, 
       method: 'POST' 
      }); //end ajax 
     }); 
    }); 
+0

谢谢,但错误文本一次只显示一个,而不是在所有空白字段和​​提交空数据问题仍然存在。 – wodden

+0

尝试更新的代码。 –

+0

错误代码的工作就像一个魅力,但我仍然有这个问题。我很抱歉,但如果可能的话,你可以检查你的代码在IDE上,因为这可能是我的框架行事,我浪费你的时间。 编辑:我在ajax之前添加了一个警报,它没有显示,所以ajax调用不应该运行 – wodden