我有一个问题,我想避免在单击 Flask 应用程序中的按钮时重新加载。我知道有 Ajax 解决方案,但我想知道如何将按钮链接到 ajax 函数以发布按钮值并运行链接到其值的 python 函数。
这是我的 html 按钮:
<div id="d_line1"> <button type="submit" id="bul" name="UL" value="UL">UL</button> <button type="submit" id="bu" name="U" value="U">ʌ</button> <button type="submit" id="bur" name="UR" value="UR">UR</button> </div> <div id="d_line2"> <button type="submit" id="bl" name="L" value="L"><</button> <button type="submit" id="br" name="R" value="R">></button> </div> <div id="d_line3"> <button type="submit" id="bdl" name="DL" value="DL">DL</button> <button type="submit" id="bd" name="D" value="D">v</input> <button type="submit" id="bdr" name="DR" value="DR">DR</button> </div>
与按钮关联的python函数:
@app.route('/', methods=["GET", "POST"]) @app.route('/interface_novapro.html', methods=["GET", "POST"]) def pilotageTour(): if request.method == "POST": if request.form.get('UL') == 'UL': print("Bouton Up Left reconnu") if request.form.get('U') == 'U': print("Bouton Up reconnu") if request.form.get('UR') == 'UR': print("Bouton Up Right reconnu") if request.form.get('L') == 'L': print("Bouton Left reconnu") if request.form.get('R') == 'R': print("Bouton Right reconnu") if request.form.get('DR') == 'DR': print("Bouton Down Right reconnu") if request.form.get('D') == 'D': print("Bouton Down reconnu") if request.form.get('DL') == 'DL': print("Bouton Down Left reconnu") if request.form.get('S') == 'S': print("Bouton Stop reconnu") return render_template("/interface_novapro.html")
我对 ajax 函数应该是什么样子有一些想法,但我对 javascript 不太熟悉......
$("button").click(function(e) { e.preventDefault(); //to avoid reload $.ajax({ type: "POST", url: "/interface_novapro.html", data: { "How can I get the value of the button tag??" }, success: function(result) { alert('ok'); }, error: function(result) { alert('error'); } }); });
如果您需要有关我的代码的更多信息,请告诉我!我期待您的帮助。提前致谢。
要实现您描述的功能,可以使用 Ajax 将按钮的值发送到 Flask 后端,而不重新加载页面。以下是完整的解决方案:
为每个按钮添加一个 class(例如 ajax-button),以便通过 jQuery 轻松选择它们。这样,您可以使用通用事件处理程序来捕获所有按钮的点击事件。
class
ajax-button
<div id="d_line1"> <button type="button" class="ajax-button" id="bul" value="UL">UL</button> <button type="button" class="ajax-button" id="bu" value="U">ʌ</button> <button type="button" class="ajax-button" id="bur" value="UR">UR</button> </div> <div id="d_line2"> <button type="button" class="ajax-button" id="bl" value="L"><</button> <button type="button" class="ajax-button" id="br" value="R">></button> </div> <div id="d_line3"> <button type="button" class="ajax-button" id="bdl" value="DL">DL</button> <button type="button" class="ajax-button" id="bd" value="D">v</button> <button type="button" class="ajax-button" id="bdr" value="DR">DR</button> </div>
type="submit"
type="button"
class="ajax-button"
使用 jQuery 捕获按钮点击事件,并发送其值到 Flask 后端。
$(document).ready(function() { $(".ajax-button").click(function(e) { e.preventDefault(); // 防止页面刷新 const buttonValue = $(this).val(); // 获取按钮的值 $.ajax({ type: "POST", url: "/interface_novapro.html", data: JSON.stringify({ buttonValue: buttonValue }), // 将数据序列化为 JSON contentType: "application/json", success: function(response) { alert(response.message); // 使用后端返回的消息 }, error: function(error) { alert("An error occurred: " + error.responseText); } }); }); });
Flask 需要支持接收 JSON 格式的数据。
from flask import Flask, request, jsonify, render_template app = Flask(__name__) @app.route('/', methods=["GET", "POST"]) @app.route('/interface_novapro.html', methods=["GET", "POST"]) def pilotageTour(): if request.method == "POST": # 从 AJAX 请求中获取按钮值 data = request.get_json() button_value = data.get("buttonValue") # 根据按钮值执行相应的逻辑 if button_value == 'UL': print("Bouton Up Left reconnu") return jsonify({"message": "Bouton Up Left reconnu"}) elif button_value == 'U': print("Bouton Up reconnu") return jsonify({"message": "Bouton Up reconnu"}) elif button_value == 'UR': print("Bouton Up Right reconnu") return jsonify({"message": "Bouton Up Right reconnu"}) elif button_value == 'L': print("Bouton Left reconnu") return jsonify({"message": "Bouton Left reconnu"}) elif button_value == 'R': print("Bouton Right reconnu") return jsonify({"message": "Bouton Right reconnu"}) elif button_value == 'DR': print("Bouton Down Right reconnu") return jsonify({"message": "Bouton Down Right reconnu"}) elif button_value == 'D': print("Bouton Down reconnu") return jsonify({"message": "Bouton Down reconnu"}) elif button_value == 'DL': print("Bouton Down Left reconnu") return jsonify({"message": "Bouton Down Left reconnu"}) elif button_value == 'S': print("Bouton Stop reconnu") return jsonify({"message": "Bouton Stop reconnu"}) return render_template("/interface_novapro.html")
.click()
在点击时,获取按钮的值并通过 Ajax POST 请求发送到后端。
发送数据:
按钮的值被包装为 JSON 数据并发送到 Flask。
后端处理:
request.get_json()
根据按钮的值执行相应的逻辑,并返回一个 JSON 响应。
响应处理:
通过这种方式,您可以实现按钮点击与 Flask 后端函数的无刷新交互。