我在表单检查空场后,发送空的数据,只有当所有的领域都充满的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()
请注意,即使表单页面首次加载(在提交表单之前),您的控制器也会在db.user中插入一条记录 - 在这种情况下,所有字段值将为“无”。此外,您的Ajax URL是一个相对URL,因此它实际上指向当前页面的URL,并附加了“dbQuery”(例如,如果当前页面URL是/ default/signup,Ajax请求将转到/ default /注册/的DBQuery)。在这种情况下,“dbQuery”将是request.args [0]的值,而不是控制器函数的名称。此外,您的表单不包含CSRF保护。 – Anthony
如果您想通过Ajax提交表单,更好的方法是将表单放入[Ajax组件](http://web2py.com/books/default/chapter/29/12/components-and-plugins #组件 - 负载和阿贾克斯)。您还应该使用'SQLFORM'来处理表单处理和数据库插入(如果需要,您仍然可以在视图中使用自定义HTML)。如果您需要这些帮助,请咨询Google群组。 – Anthony