2014-02-28 68 views
1

我想在單擊一個圖像(按鈕)時允許我通過web界面控制伺服器來調用python函數。如何從jquery post執行python函數

這裏是我的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」,我得到了整個Python代碼顯示在我的#camerapos股利。

如果我需要發佈更多信息,請讓我知道。謝謝!!

回答

2

您需要一些額外的工具才能從客戶端查詢調用服務器端python代碼。 Flask是一個輕量級的Python Web框架,通常是這類問題的首選工具。

瓶文檔:http://flask.pocoo.org

瓶使用jQuery:http://flask.pocoo.org/docs/patterns/jquery/

瓶使用jQuery POST:how can I use data posted from ajax in flask?

要與瓶/ jQuery的使用POST,你必須標註在蟒蛇的接收方法。你的代碼看起來像這樣。

@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");}); 

     }); 

我不確定這一步,但您可能還需要用.ajax替換.post。由於您不希望在顯示新內容之前重新加載頁面,因此這不是傳統的發佈請求,而是ajax。

另外,是否有一個原因,你必須使用一個post請求,並GET_JSON將無法​​正常工作,就像上面的jquery ajax模式?

重點說明:

  1. 添加`方法= [ 'POST']
  2. 數據請求參數在data.request.data
  3. 返回數據中發現在一個 「jsonified」 字典要求from Flask import jsonfiy
+0

感謝您的回覆。你的意思是我可以添加這個'從瓶子進口燒瓶,jsonify,render_template,請求 app = Flask(__ name__) @ app.route('/')'? – yvonnezoe

+0

但我在燒瓶頁面上使用'post'而不是'get'。 – yvonnezoe

+0

這很好,你可以很容易地使用POST和Flask。只需相應地註釋您的Flask功能即可。上面更新了我的答案。 –

0

除了運行完整的服務器端python web框架, 最小的方法可能是使用cgi例如uwsgi

有關最小工作設置的更多信息,請參閱官方python docs

交互

如果你的web應用需要與服務器進行更多的互動,你可能要考慮使用的WebSockets,而不是AJAX的通信框架。 注意事項: 舊版瀏覽器不支持WebSockets。

well developed framework that has websocket support is tornado的示例。

+0

謝謝!我之前嘗試過cgi,但我不想使用表單格式。我點擊時使用圖像按鈕,會在python中執行一個函數 – yvonnezoe

+0

@ yvonnezoe-我添加了一些關於您可能需要更多交互性的情況;我的建議是使用websockets等龍捲風 – jmetz