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 函数中按下的按钮的值。