Flask - POST 请求正在发送部分输入值
Flask - POST Request is sending partial input values
我目前正在用 Python/Flask 和一些 Javascript 制作一个小游戏,但是当我提交我的表单时,我只能收到一些值,但其他 None 已经存在 :
这是我的表格:
<form name="question_form" id="question_form" action="{{ url_for('question') }} " method='POST' onsubmit="return validateAnswer()">
<p class="question">{{ question }}</p>
<button name="given_answerA" type="submit" class="clickable" id="questions_A" value="{{ answers[0] }}">{{ answers[0] }}</button>
<button name="given_answerB" type="submit" class="clickable" id="questions_B" value="{{ answers[1] }}">{{ answers[1] }}</button>
<button name="given_answerC" type="submit" class="clickable" id="questions_C" value="{{ answers[2] }}">{{ answers[2] }}</button>
<button name="given_answerD" type="submit" class="clickable" id="questions_D" value="{{ answers[3] }}">{{ answers[3] }}</button>
<input name="nb_question" id="nb_question" type="hidden" value="{{ nb }}"/>
<input name="choice_good" id="choice_good" type="hidden" value="{{ choice_good }}"/>
</form>
在我的 flask APP 中,这是我所做的:
answered = request.form.get('given_answerA')
correct_answer = request.form.get('choice_good')
nb_question = int(request.form.get('nb_question')
我有“correct_answer”和“nb_question”的结果,但 given_answerA 不存在,我尝试打印 request.form 以查看内容,但我只看到 choice_good 和 nb_question.
的值
我试图用相同的名称重命名我的所有按钮,更改为“按钮类型=提交”“输入类型=提交”,但似乎 none 有效..
有什么想法吗?谢谢!
编辑:似乎问题在于 JS 函数(我忘了包括在内):
function validateAnswer() {
var answered = document.activeElement.id;
var audio = document.getElementById("audio_validate");
var form = document.getElementById("question_form");
var background_audio = document.getElementById("background_audio");
var body = document.getElementsByTagName('body')[0];
var filename = 'static/images/background_' + answered + ".jpg";
body.style.backgroundImage = 'url('+filename+')';
background_audio.pause();
audio.play();
setTimeout(function(){
form.submit();
}, 20000);
return false;
如果我保持 return false,按钮是空的(所以我认为它在不知道按钮被点击的情况下用 JS 提交)
如果我保持 return 为真,则不会执行超时,也不会暂停和播放任何音乐,但会发送 post 值;我需要这个“20”秒的延迟才能正确播放音乐并制造悬念,因为这是一个想成为百万富翁的游戏
您的 JS 函数拦截提交事件(其中包含有关单击哪个按钮的数据)并手动调用 form.submit
,这就是按钮值未被发送的原因。
解决此问题的一个简单方法是添加另一个隐藏字段,您可以将其设置为从 JS 函数中按下的按钮的值。
我目前正在用 Python/Flask 和一些 Javascript 制作一个小游戏,但是当我提交我的表单时,我只能收到一些值,但其他 None 已经存在 :
这是我的表格:
<form name="question_form" id="question_form" action="{{ url_for('question') }} " method='POST' onsubmit="return validateAnswer()">
<p class="question">{{ question }}</p>
<button name="given_answerA" type="submit" class="clickable" id="questions_A" value="{{ answers[0] }}">{{ answers[0] }}</button>
<button name="given_answerB" type="submit" class="clickable" id="questions_B" value="{{ answers[1] }}">{{ answers[1] }}</button>
<button name="given_answerC" type="submit" class="clickable" id="questions_C" value="{{ answers[2] }}">{{ answers[2] }}</button>
<button name="given_answerD" type="submit" class="clickable" id="questions_D" value="{{ answers[3] }}">{{ answers[3] }}</button>
<input name="nb_question" id="nb_question" type="hidden" value="{{ nb }}"/>
<input name="choice_good" id="choice_good" type="hidden" value="{{ choice_good }}"/>
</form>
在我的 flask APP 中,这是我所做的:
answered = request.form.get('given_answerA')
correct_answer = request.form.get('choice_good')
nb_question = int(request.form.get('nb_question')
我有“correct_answer”和“nb_question”的结果,但 given_answerA 不存在,我尝试打印 request.form 以查看内容,但我只看到 choice_good 和 nb_question.
的值我试图用相同的名称重命名我的所有按钮,更改为“按钮类型=提交”“输入类型=提交”,但似乎 none 有效..
有什么想法吗?谢谢!
编辑:似乎问题在于 JS 函数(我忘了包括在内):
function validateAnswer() {
var answered = document.activeElement.id;
var audio = document.getElementById("audio_validate");
var form = document.getElementById("question_form");
var background_audio = document.getElementById("background_audio");
var body = document.getElementsByTagName('body')[0];
var filename = 'static/images/background_' + answered + ".jpg";
body.style.backgroundImage = 'url('+filename+')';
background_audio.pause();
audio.play();
setTimeout(function(){
form.submit();
}, 20000);
return false;
如果我保持 return false,按钮是空的(所以我认为它在不知道按钮被点击的情况下用 JS 提交) 如果我保持 return 为真,则不会执行超时,也不会暂停和播放任何音乐,但会发送 post 值;我需要这个“20”秒的延迟才能正确播放音乐并制造悬念,因为这是一个想成为百万富翁的游戏
您的 JS 函数拦截提交事件(其中包含有关单击哪个按钮的数据)并手动调用 form.submit
,这就是按钮值未被发送的原因。
解决此问题的一个简单方法是添加另一个隐藏字段,您可以将其设置为从 JS 函数中按下的按钮的值。