从Javascript和JQuery Mobile UI运行Python CGI脚本

我正在努力完成的工作流程如下。

  • 有一个带有一系列范围滑块元素的jQuery Mobile UI。 每一个都用于控制不同的function。
  • 当用户移动并释放这些滑块中的任何一个时,应该触发一个jQuery事件来进行AJAX调用(我不在乎它是否使用JSON,XML,POST等 – 最快是最好的)
  • Ajax调用包含有关滑动的滑块及其新值的信息(例如:id = slider1,value = 215)
  • Ajax在CGI bin中执行python脚本,该脚本读取ID和值,并通过Serial控制连接到我的Raspberry Pi的一些硬件(Raspberry pi也运行Web服务器)。

我有一个带有一堆滑块的JQuery UI。 每个滑块代码如下所示:

需要有一些伴随的JQuery做这样的事情:

  $(document).ready(function () { $.ajax({ type: "POST", url: "cgi-bin/command.py", success: function (msg) { alert("Data Saved: " + msg); } }); }); 

显然,关于JS的两件大事都要改变。 首先,它需要在释放滑块时执行(不在页面加载时),其次需要实际将滑块的值传递给Python脚本。 我这样设置只是为了测试。 当我加载页面时,这个测试器python脚本正确执行,并且连接到Raspberry Pi的一些硬件被正确控制。 我知道我应该使用slidestop事件 ,但我不能让它工作。 我也不确定将一些变量发送到python脚本的最佳方法是什么。

我的python脚本现在看起来像这样:#!/ usr / bin / python

 import cgi import serial ser = serial.Serial('/dev/ttyUSB0', 57600) ser.write("Hello, this is a command!\n") # write a string ser.close() 

因此,它不会寻找任何类型的传入数据,它只是被调用并写入一些串行数据。 它应该能够从AJAX调用接收数据,并根据收到的信息调整串行写入命令。 我需要帮助将这些信息转换为我可以使用的变量。 我假设我还应该将某种“我已完成”的消息传回给JavaScript调用函数。

我期待着人们可能对高级问题或解决我在此处列出的更具体问题的方法有任何见解。

谢谢!

以下怎么样:

 ...    ... 

使用以下Javascript:

 $(document).ready(function() { $('.posting-slider').on('slidestop', function(e) { $.post('/server/script.py', { id: $(this).data('slider-id'), value: e.target.value }, function(data, textStatus, jqXHR) { console.log('POSTed: ' + textStatus); }); }); }); 

最后,python:

 import cgi form = cgi.FieldStorage() import json import serial ser = serial.Serial('/dev/ttyUSB0', 57600) ser.write("Hello, this is a command for value %s from slider id %s!\n" % (form["id"], form["value"])) # write a string ser.close() print "Content-type: application/json" print print(json.JSONEncoder().encode({"status":"ok"}))