2013-07-19 127 views
1

我试图制作一个接受按钮点击的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方法?

+0

我会认为如果你看到HTTP 200确定为“/ XBox/clicked/OnOff”请求,那么Flask应用程序的行为是正确的。你的Jquery代码只是发出一个Ajax请求 - 你没有显示任何响应处理程序。没有它们,当响应到达时页面不会做任何事情。你把他们从你发布的代码中删除了吗? –

+0

@SteveAllison我没有做任何响应,因为没有必要获得所需的响应,只需运行附加到由ajax请求发送的url的python函数,然后在python中运行子进程调用,就像我链接到上面的源代码。据我可以告诉他,他什么都不做,甚至不返回render_template命令。我做的唯一的原因是测试它是否正在运行python函数,因为如果它是那么模板应该呈现正确?我只使用ajax,因此页面不必为每次点击重新加载 –

+0

在代码中,模板将呈现并返回给jQuery Ajax对象,该对象不会对它执行任何操作 - 它不会在浏览器中呈现它。您是否使用过浏览器的开发工具来查看浏览器是否收到响应 - 再次,如果Flask记录HTTP 200确定,那么我会想象请求正在被正确处理。你也应该能够将打印语句放在你的Flask方法中,并且看到它们也被记录(我想)。 –

回答

1

在代码中,模板将呈现并返回给jQuery Ajax对象,该对象不会执行任何操作 - 它不会在浏览器中呈现它。您是否使用过浏览器的开发工具来查看浏览器是否收到响应 - 再次,如果Flask记录HTTP 200确定,那么我会想象请求正在被正确处理。你也应该能够将打印语句放在你的Flask方法中,并且看到它们也被记录(我想)。