javascript - 当多个表单位于同一页面时,WTForms 提交表单两次

标签 javascript python flask wtforms flask-wtforms

在我看来,我有几种不同的形式。在其中输入要搜索的名字和姓氏。如果有结果,页面将刷新,并且用于选择用户的第二个表单将显示为表格,其中单击一行即可提交该行的数据。由于某种原因,提交第二个表单会导致为每个字段提交两个值:一个完全为空,另一个包含正确的信息。

我有一些 JavaScript,当单击表中的一行时将执行这些 JavaScript。它应该使用表中的数据填写并提交一个隐藏表单。我遇到的问题是,提交表单时,会提交两组值。表单提交后的request.form包含以下内容:

ImmutableMultiDict([('csrf_token', u'1420171907##6ad5346730985191250a52e6432e924ef05c23ee'), ('last_name', u''), ('last_name', u'Smith'), ('first_name', u''), ('first_name', u'John')])

这是脚本:

$('table#theTable tr').click(function () {
var cells = this.getElementsByTagName('td');
$('#selectuser_last_name').val(cells[0].innerHTML);
$('#selectuser_first_name').val(cells[1].innerHTML);
document.selectuser.submit();
});

这是与之配套的 HTML:

<table id="theTable">
    <thead>
        <tr>
            <th>Last</th>
            <th>First</th>
        </tr>
    </thead>
    <tbody>
        {% for user in users %}
            <tr>
                <td>{{ user.last_name }}</td>
                <td>{{ user.first_name }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>
<form id=selectUserForm action="/handle_users" method="post" name="selectuser">
    {{ forms.selectuser.hidden_tag() }}
    {{ forms.selectuser.last_name(id="selectuser_last_name") }}
    {{ forms.selectuser.first_name(id="selectuser_first_name") }}
    <input type="submit">Test</input>
</form>

我使用 Python 和 Flask 来处理发布的内容。

最佳答案

看来您实际上提交了两次 - 一次在表单中包含任何内容之前,一次在填充表单之后(后者由 javascript,前者通过表单提交机制)。

如果用户没有真正在表单中输入任何内容,但每次单击一行时,这都是对服务器的简单调用。跳过整个表格,这没有帮助。只需将您需要的信息传递给服务器即可 - 可以是一个简单的 ajax post:

 $('table#theTable tr').click(function () {
   var cells = this.getElementsByTagName('td');
   $.ajax({ 
        type : "POST",
        url : "/handle_users",
        async:true,
        contentType : 'application/json;charset=UTF-8',
        data: JSON.stringify({first_name:cells[0].innerHTML,last_name:cells[1].innerHTML}, null, '\t'),
        success : function(data) {
            // optional: do something when server-side processing is done 
        }
    });
});

然后使用/handle_users 路径中的 request.get_json() 从 Flask 获取数据。

关于javascript - 当多个表单位于同一页面时,WTForms 提交表单两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736805/

相关文章:

python - 使用 Flask : ImportError: No module named bcrypt 运行 python 服务器时出错

javascript - D3直方图,时间戳中日期的出现次数

python - 使用 Python 正则表达式从电子邮件中提取一些信息

Python Flask 错误代码 400,消息请求版本错误

jquery - DataTables (serverSide) 在第一次请求时正常,在搜索或重新排序时请求中失败并显示 "[Object object"]

python - 为什么我的 Tensorboard 图中所有内容都断开连接?

javascript - 在 jQuery 对话框打开后找到一个元素

javascript - 在所有页面上传播暗模式更改

javascript - 函数是否设置在 javascript 'creation phase' 中的变量之前?

Python:如何从文本文件中提取字符串以用作数据