Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 刷新Flask web app页面时提交上一选择的Html表单_Javascript_Python_Html_Flask - Fatal编程技术网

Javascript 刷新Flask web app页面时提交上一选择的Html表单

Javascript 刷新Flask web app页面时提交上一选择的Html表单,javascript,python,html,flask,Javascript,Python,Html,Flask,在我的Flask应用程序中,我有一个简单的POST类型和4个同名单选按钮选项。当我选择一个选项并按“下一步”(提交类型输入)时,一个新页面将加载不同的内容,但形式相同 问题是,如果我刷新新加载的页面,表单将使用与先前选择的选项具有相同值的选项提交 表格: 我只想能够刷新页面而不发布表单 我已经试过使用 document.getElementById("myForm").reset(); 以及 <body onload="document.myForm.reset();"> 此处提

在我的Flask应用程序中,我有一个简单的POST类型和4个同名单选按钮选项。当我选择一个选项并按“下一步”(提交类型输入)时,一个新页面将加载不同的内容,但形式相同

问题是,如果我刷新新加载的页面,表单将使用与先前选择的选项具有相同值的选项提交

表格:

我只想能够刷新页面而不发布表单

我已经试过使用

document.getElementById("myForm").reset();
以及

<body onload="document.myForm.reset();">
此处提供完整代码(annotator.py、app/templates/index.html和app/templates/base.html):

编辑:session只是一个全局变量,我用它来存储东西。名称在python代码的开头初始化,save_annotation()和get_least_annotated_page()是函数

EDIT2:加载新页面时,所有按钮均未选中。但当我刷新时,会提交一个选项。我只是通过查看命令行输出才注意到。

您可以尝试:

document.getElementById(“op1”).prop('checked',false)


这将取消选中单选按钮。这可以对每个页面执行。

当您刷新页面时,浏览器将执行最后一个操作,在您的情况下是一个POST

避免这种情况的方法是将返回更改为重定向,而不是渲染:

if request.method == 'POST':

    ...

    return redirect(url_for('this_view'))

...

我找到了一个有效的解决方案。在我确定之前,它可能需要更多的测试,但目前它运行良好

基本上,我会保留一个变量,当用户选择一个选项时,该变量将递增。然后将会话(服务器端)中存储的值与POST请求在表单中发送的版本进行比较。如果它们相同,则这是刷新,否则这是正常提交

代码:

客户端(index.html)::


加载新页面时,该按钮未选中。加载新页面时,将取消选中所有按钮。但如果我按下刷新(从浏览器),它会提交最后选择的按钮。如果我不看命令行,我就不会注意到。哦,我明白了。我想知道这是否与在python代码末尾返回render_模板(“index.html”)有关。可能是在刷新页面时发送了旧版本?不幸的是,因为我还必须传递一些参数(我没有将它们放在这里以使其看起来更简单),所以我不能使用重定向。我会在我的问题中加上这一点。我还想到了一个主意,那就是使用window.onbeforeunload(){return}停止刷新。我会试试看,如果行得通,我会把答案贴出来。我的想法行不通。我目前正试图发送一个变量,当勾选某个选项时,该变量会发生变化。服务器将比较新旧文件,以检查这是刷新还是提交。
<body onload="document.myForm.reset();">
autocomplete="off"
if request.method == 'POST':

    ...

    return redirect(url_for('this_view'))

...
<form method="post">
    <table align="center" cellpadding="10" border="0" style="background-color: antiquewhite;">
        <tr>
            <td rowspan="2"><h3>Is this an <i>origin</i> for the <i>claim?</i></h3></td>
            <td><input type="radio" name="op" id="op1" onchange="incAlpha();" value="1" >Yes</td>
            <td><input type="radio" name="op" id="op2" onchange="incAlpha();" value="2" >No</td>
            <td rowspan="2"><input type="submit" value=Next></td>
        </tr>

        <tr>
            <td><input type="radio" name="op" id="op3" onchange="incAlpha();" value="3" >Invalid Input</td>
            <td><input type="radio" name="op" id="op4" onchange="incAlpha();" value="4" >Don't Know</td>
        </tr>
    </table>
        <input type="hidden" id="alpha" name="alpha" value={{alpha}}>
    </form>
<script type="text/javascript">
    var globFlag=true; // use so that the incrementation is only triggered once every page load
    function incAlpha()
    {
        if(globFlag)
        {
            let value= document.getElementById("alpha").value;
            document.getElementById("alpha").value = (parseInt(value)+1)%10;
            globFlag=false;
        }
    }
</script>
name = session.get('username')
        alphaFromSession = session.get('alpha')
        if request.method == 'POST':
            op = request.form.get('op')
            alphaFromClient = request.form.get('alpha')
            if op and not (alphaFromSession == alphaFromClient):
                if op in ['1', '2', '3', '4']:
                    save_annotation(session.get('claim'),session.get('origin'), op, name)
                    session['alpha']=alphaFromClient
                    c_url, o_url, src_lst, donePg, totalPg, done, total = get_least_annotated_page(name, session.get('claim'))


.
.
.
.
return render_template('index.html',t1=c_url, t2=o_url,alpha=session.get('alpha'))