我试图制作一个接受按钮点击的web应用程序。点击按钮然后发送一个特定的设备和操作代码到python应用程序,然后使用Lirc调用irsend命令。这是基于离的源代码/指令从这里:Jquery按钮点击发送带有Flask和Python的AJAX请求
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警报命令的功能警报命令运行
蟒蛇/瓶的应用程序是这样的:
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文件”页面没有加载
这样的话,即使瓶调试器说,有一个成功的GET请求(返回200)到“/ Xbox/clicked/OnOff”(填写上面例子的变量)
所以任何想法为什么test.html没有从ajax请求加载,当它看起来在源代码/教程I只要他使用相同的ajax方法?
我会认为如果你看到HTTP 200确定为“/ XBox/clicked/OnOff”请求,那么Flask应用程序的行为是正确的。你的Jquery代码只是发出一个Ajax请求 - 你没有显示任何响应处理程序。没有它们,当响应到达时页面不会做任何事情。你把他们从你发布的代码中删除了吗? –
@SteveAllison我没有做任何响应,因为没有必要获得所需的响应,只需运行附加到由ajax请求发送的url的python函数,然后在python中运行子进程调用,就像我链接到上面的源代码。据我可以告诉他,他什么都不做,甚至不返回render_template命令。我做的唯一的原因是测试它是否正在运行python函数,因为如果它是那么模板应该呈现正确?我只使用ajax,因此页面不必为每次点击重新加载 –
在代码中,模板将呈现并返回给jQuery Ajax对象,该对象不会对它执行任何操作 - 它不会在浏览器中呈现它。您是否使用过浏览器的开发工具来查看浏览器是否收到响应 - 再次,如果Flask记录HTTP 200确定,那么我会想象请求正在被正确处理。你也应该能够将打印语句放在你的Flask方法中,并且看到它们也被记录(我想)。 –