Javascript 使用Ajax验证返回的表单不会在表单本身中显示错误,而是在新网页中打开结果
应用程序通过ajax调用验证并返回成功或错误结果,为简单起见,只有两个字段和提交按钮。Javascript 使用Ajax验证返回的表单不会在表单本身中显示错误,而是在新网页中打开结果,javascript,html,ajax,flask-wtforms,Javascript,Html,Ajax,Flask Wtforms,应用程序通过ajax调用验证并返回成功或错误结果,为简单起见,只有两个字段和提交按钮。 所需的结果是显示验证错误,与传统的Flask方法相同,但使用Ajax显示时,该字段在 它正在测试,字段为空并提交 表格为: class TestForm(FlaskForm): username = StringField('Username', validators=[Length(min=3, max=15, message='Username %(min)s minimun and %(max)
所需的结果是显示验证错误,与传统的Flask方法相同,但使用Ajax显示时,该字段在
它正在测试,字段为空并提交
表格为:
class TestForm(FlaskForm):
username = StringField('Username', validators=[Length(min=3, max=15, message='Username %(min)s minimun and %(max)s maximum characters')])
age = IntegerField('Age', validators=[NumberRange(min=14, message='Minumin age is %(min)s for login')])
意见是:
@clients.route('/nit_ajx', methods=['GET', 'POST'])
def nit_ajx():
form = TestForm()
if request.method == 'POST':
if form.validate():
return jsonify({'name' : 'OOT WOOT!'})
return jsonify(form.errors), 400
return render_template('newtest.html', form=form, title='Test')
网页测试包括js脚本:
<!DOCTYPE html>
<html>
<head>
<title>AJAX Example</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
</head>
<body>
<div class="container">
<br><br><br>
<form id="form" method="POST">
{{ form.csrf_token }}
<div class="text-danger my-2" id="csrf_token-error">
</div>
<div class="form-group">
{{ form.username.label }}
{{ form.username(class='form-control') }}
<div id="username-error" class="invalid-feedback"></div>
</div>
<button class="btn btn-primary mb-2" id="username_upd">update username</button>
<div class="form-group">
{{ form.age.label }}
{{ form.age(class='form-control') }}
<div id="age-error" class="invalid-feedback"></div>
</div>
<button class="btn btn-primary" id="age_upd">update age</button>
</form>
<br>
<div id="success-message" style="display: none;"></div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
const form = document.getElementById('form')
const successMessage = document.getElementById('success-message')
const fields = {
csrf_token: {
input: document.getElementById('csrf-token'),
error: document.getElementById('csrf_token-error')
},
username: {
input: document.getElementById('username'),
error: document.getElementById('username-error')
},
age: {
input: document.getElementById('age'),
error: document.getElementById('age-error')
}
}
$('form').on('submit', function(event) {
$.ajax({
data : {
csrf_token: fields.csrf_token.input.value,
username: fields.username.input.value,
age: fields.age.input.value
},
type : 'POST',
url : '/nit_ajx'
})
.done(function(data) {
if (data.error) {
const errors = data.error.json();
Object.keys(errors).forEach((key) => {
fields[key].input.classList.add('is-invalid');
fields[key].error.innerHTML = errors[key][0];
});
}
else {
successMessage.innerHTML = data.name.json();
form.style.display = 'none';
successMessage.style.display = 'block';
}
});
event.preventDefault();
});
});
</script>
</body>
</html>
AJAX示例
{{form.csrf_token}
{{form.username.label}
{{form.username(class='form-control')}
更新用户名
{{form.age.label}
{{form.age(class='form-control')}
更新年龄
$(文档).ready(函数(){
const form=document.getElementById('form')
const successMessage=document.getElementById('success-message'))
常量字段={
csrf_令牌:{
输入:document.getElementById('csrf-token'),
错误:document.getElementById('csrf\u token-error')
},
用户名:{
输入:document.getElementById('username'),
错误:document.getElementById('username-error')
},
年龄:{
输入:document.getElementById('age'),
错误:document.getElementById('age-error'))
}
}
$('form')。在('submit',函数(事件){
$.ajax({
数据:{
csrf_标记:fields.csrf_标记.input.value,
用户名:fields.username.input.value,
年龄:fields.age.input.value
},
键入:“POST”,
url:“/nit_ajx”
})
.完成(功能(数据){
if(data.error){
const errors=data.error.json();
Object.key(错误).forEach((key)=>{
字段[key].input.classList.add('is-invalid');
字段[key].error.innerHTML=errors[key][0];
});
}
否则{
successessage.innerHTML=data.name.json();
form.style.display='none';
successMessage.style.display='block';
}
});
event.preventDefault();
});
});