如何从jquery post执行python函数

我想在单击图像(按钮)时调用python函数,这样我就可以从Web界面控制伺服。

这是我的jQuery代码的一部分:

$('#left_button').click(function(){ $.post("cameraservo2.py", {direction:"left"}).done(function (reply) { $('#camerapos').empty().append(reply); alert("left button clicked");}); }); 

这是我的Python代码:

 #!/usr/bin/python def index (self, **data): import pigpio import time servos=4 key = data['direction'] m=1500 while (m >= 500 and m <= 2500): if (key =="left"): m=m+100 elif (key =="right"): m=m-100 pigpio.start() pigpio.set_servo_pulsewidth(servos, m) servostatus= "Servo {} {} micro pulses".format(servos[0], key, m) print servostatus time.sleep(1) pigpio.stop() return servostatus 

我的问题是当单击按钮时,它会提示“单击左键”,这意味着它已经运行了python文件。 但是我没有显示“servostatus”,而是在我的#camerapos div中显示了整个python代码。

如果我需要发布更多信息,请告诉我。 谢谢!!

您需要一些额外的工具才能从客户端查询调用服务器端python代码。 Flask是一个轻量级的python web框架,通常是这类问题的首选工具。

Flask文档: http : //flask.pocoo.org

使用JQuery的烧瓶: http : //flask.pocoo.org/docs/patterns/jquery/

使用Jquery POST的烧瓶: 如何使用从烧瓶中的ajax发布的数据?

要在Flask / Jquery中使用POST,必须在python中注释接收方法。 你的代码看起来像这样。

 @app.route('/servo_pos', method=["POST"]) def servo_pos(): do_your_work_here return jsonify({"servo_pos", ret_val}) 

你还需要稍微调整你的jquery。

 $('#left_button').click(function(){ $.post("/servo_post", {direction:"left"}).done(function (reply) { $('#camerapos').empty().append(reply); alert("left button clicked");}); }); 

我不确定这一步,但您可能还需要将.post替换为.ajax。 由于您不希望在显示新内容之前重新加载页面,因此这不是传统的发布请求,而是ajax请求。

或者,有没有理由你必须使用post请求,而GET_JSON将不起作用,就像上面的jquery ajax模式一样?

主要说明:

  1. 添加`methods = [‘POST’]
  2. 数据请求参数可在data.request.data找到
  3. 在“jsonified”字典中返回数据需要from Flask import jsonfiy

除了运行完整的服务器端python Web框架之外,最小的方法可能是使用cgi例如uwsgi 。

有关最小工作设置的更多信息,请参阅官方python文档 。

互动

如果您的webapp需要与服务器进行更多交互,您可能需要考虑使用websockets而不是AJAX作为通信框架。 警告:旧浏览器不支持WebSockets。

具有websocket支持的良好开发框架的示例是龙卷风 。