2017-06-23 83 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