点击Jquery按钮用Flask和Python发送AJAX请求

2024-04-23 09:54:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个接受按钮点击的web应用程序。单击按钮后,会向python应用程序发送一个特定的设备和操作代码,然后该应用程序使用Lirc调用irsend命令。这是基于以下源代码/说明:

https://github.com/slimjim777/web-irsend

http://randomtutor.blogspot.com/2013/01/web-based-ir-remote-on-raspberry-pi.html

按钮的html很简单,位于“Xbox.html”中

<button onclick="clickedOp('Xbox', 'OnOff');"> Power </button>

这将启动js函数:

<script>
function clickedOp(device_name, op) {
    $.ajax({url:'/' + device_name + '/clicked/' + op});
}

我知道该函数正在触发一个click事件,因为如果我在clickedOp函数中放置一个alert命令,alert命令将运行

python/flask应用程序如下所示:

from flask import Flask
from flask import render_template
from flask import request, redirect, url_for

BASE_URL = ''

app = Flask(__name__)


@app.route("/")
def menu():
    return render_template('menu.html')

@app.route("/<device_name>")
def remote(device_name):
    if device_name == "Xbox":
        return render_template('Xbox.html')


@app.route("/<device_name>/clicked/<op>")
def clicked(device_id=None, op=None):
    return render_template('test.html')

if __name__ == "__main__":
    app.run('0.0.0.0', port=80, debug=True)

ajax请求之前的所有代码都可以工作。转到“/”加载menu.html模板并显示指向不同设备的链接,例如

<a href="Xbox"> Xbox </a>

将路由到

"/<device_name>" 

在python程序中加载“Xbox.html”。 然后,按钮加载并单击它将触发“clickedOp(device_name,op)”功能。 这就是它坏的地方。即使ajax请求路由到

"/<device_name>/clicked/<op>" 

未加载“test.html”页

即使Flask调试器说有一个成功的GET请求(它返回200)到“/Xbox/clicked/OnOff”(为上面的例子填充变量),情况也是如此

那么有什么想法可以解释为什么没有从ajax请求中加载test.html,而在我提供的源代码/教程中,他似乎使用了相同的ajax方法?


Tags: namewebapp应用程序flaskdevicehtmlajax