我在表單檢查空場後,發送空的數據,只有當所有的領域都充滿的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