【问题标题】:don't get value on button press in html不要在 html 中按下按钮获得价值
【发布时间】:2020-08-06 05:09:33
【问题描述】:

我有一个按钮,点击它时只需要执行一个 javascript 函数。 javascript 函数返回一个我打算在烧瓶后端捕获的字符串。目前javascript函数在onclick上运行。

代码:

<form id='details'method="post">
     <input class="myButton" id="mybutton" type="submit" value="Save" onclick="getdata()">
     </input>
</form>

烧瓶代码:

app.add_url_rule('/entry1', endpoint='entry1', view_func=new_data, methods=['GET', 'POST'] )

def new_data():
    if request.method == 'POST':
        details = request.form['details']
        print(details)

在烧瓶中,当我提供 request.forms['details'] 时,我什么也没得到。我希望从 getdata 中获取返回的数据。我很确定,html方面存在一些问题。请指教。

有很多关于相同的 cmets,但它没有解决......只是想知道是否有任何其他方法来处理它,我只需要在按钮单击时收集的文本传输到 python 后端,似乎很简单,但就是不能完成这个:( 谢谢

【问题讨论】:

  • 如果我的回答没有帮助,那么也分享一下python代码
  • getdata() 是做什么的?
  • getdata 从文本框中捕获所有数据并组合成一个字符串。然后它返回字符串
  • 它在某些文本框中返回值?确保文本框在您的表单中。

标签: javascript html python-3.x flask


【解决方案1】:

您在烧瓶 request.form['details'] 中一无所获,因为数据是使用 javascript 发送的。你应该试试:

request.data  # if data was sent as plain text

request.get_json() # if data was sent as json

【讨论】:

  • 糟糕,不,如果我说 details=request.data,我什么也得不到,我只是得到 b'' 作为 details 值...我严重陷入了看似无害的问题:(
【解决方案2】:

#EDIT 2检查这个答案Here

我在这里报告的大部分是参考:

  • [request.args][2]:URL 查询字符串中的键/值对
  • [request.form][3]:正文中的键/值对,来自 HTML 帖子表单或非 JSON 编码的 JavaScript 请求
  • [request.files][4]:正文中的文件,Flask 与form 分开保存。 HTML 表单必须使用enctype=multipart/form-data,否则将不会上传文件。
  • [request.values][5]:组合 argsform,如果键重叠,首选 args
  • [request.json][6]:解析 JSON 数据。请求必须具有 application/json 内容类型,或使用 [request.get_json(force=True)][7] 忽略内容类型。

所有这些都是 [MultiDict][8] 个实例(json 除外)。您可以使用以下方式访问值:

  • request.form['name']:如果您知道密钥存在,请使用索引
  • request.form.get('name'):如果密钥可能不存在,请使用 get
  • request.form.getlist('name'):如果密钥被多次发送并且您想要一个值列表,请使用 getlistget 只返回第一个值。

首先,如果您还添加烧瓶代码会很有帮助。话虽如此,将其添加到输入标签中:

<form id='details'method="post">
     <input class="myButton" name="details" id="mybutton" type="submit" value="Save" 
     onclick="getdata()">
 </input>
</form>

所以基本上你有一个 'name=""' 字段。

然后在python文件中,使用这个:

request.form['details']

如果您将值存储在变量中会更好(显然这取决于您,只是一个建议)

request_detail = request.form['details']

您可能还想在表单标签中添加一个“action=""”字段。这取决于烧瓶中如何路由装饰器。

如果你有这个例子:

@app.route('/details)
def details():
    pass

那么你的表单应该是这样的:

<form id='details'method="post" action="/details">

<form id='details'method="post" action="details">

编辑

尝试使用普通的路由装饰器看看是否修复:

@app.route('/entry1', methods=['GET', 'POST'])
def new_data():
    if request.method == 'POST':
        details = request.form['details']
        print(details)
    return render_template('filename.html')

如果您仍想使用 add_url_rule 试试这个:

app.add_url_rule('/', 'entry1', view_func=new_data, methods=['GET', 'POST'] )

【讨论】:

  • 哎呀,如果我做 request.form['details'],那么我会得到 'Save' as in button.value。
  • 我不明白你的意思?你能指定得更好吗?
  • 您是否尝试添加'name=""'标签?
  • 是的,我添加了,但是当我从 python 代码访问它时,我只得到“保存”按钮的值,而不是 getdata 的返回值
  • new_data(): 函数中是否有返回render_template?
猜你喜欢
  • 2011-01-01
  • 2012-11-12
  • 2020-07-06
  • 1970-01-01
  • 2013-03-19
  • 2018-06-18
  • 2015-04-21
  • 2017-10-25
相关资源
最近更新 更多