0
JavaScript値を渡して同じビューのフォームを同時に検証するにはどうすればよいですか?あなたは1つの値 "X"を$.ajax({data: X})
に渡すことしかできないので、私はdata:
に辞書を渡すことができますが、それは$('form').serialize()
を評価しません。今私は$.ajax({})
フォームの検証を処理し、$.post()
はFlaskビューにJavaScript配列を渡すためにあります。検証はTrue
ですが、jsArrayは決して送信されません!私は行方不明で何ですか?Flaskフォームを検証してJavaScript配列を同時に渡します
index.htmlを
{% from '_formhelpers.html' import render_field %}
<form>
{{ form.hidden_tag() }}
{{ render_field(form.first_name)}}
{{ render_field(form.last_name) }}
<button id='submit-btn'>submit</button>
</form>
<script>
var jsArray = JSON.stringify([{'item1': 'value1'}, {'item2': 'value2'}]);
$('#submit-btn').click(function(event) {
$.post(url: '/', data:jsArray, mimetype: 'application/json', success: function(){alert('data post success')});
$.ajax({
type: 'POST',
url: '/',
data: $('form').serialize(),
success: function(data) {
window.location.replace('/success');
}
});
event.preventDefault();
});
</script>
test.py
from flask import Flask, render_template, request, url_for
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.secret_key = 'mysecretkey'
class MyForm(FlaskForm):
first_name = StringField('first name', validators=[DataRequired('please enter your name')])
lasthttps://stackoverflow.com/_name = StringField('last name', validators=[DataRequired()])
@app.route('/', methods=['POST', 'GET'])
def index():
form = MyForm(request.form)
if request.method == 'POST' and form.validate():
data = request.get_json()
print(data) # >>> None
# i am handling the return in the AJAX success function.
return render_template('index.html', form=form)
@app.route('/success')
def success():
return 'success!'
ここ_formhelpers.html
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class='error'>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
ありがとうございました。 'data'が' None'の理由を知っていますか? – belle
mimetypeを 'application/json'に設定すると、これは解析されたデータを含みます。それ以外の場合はNoneになります。 [フラスコのドキュメントによる](https://flask.readthedocs.io/en/latest/api/#flask.Request.json) – Erdem
私のコードは 'form.validate()== True'と' data = {'item1': 'value1'}、{'item2': 'value2'}] 'あなたのために? – belle