我想要完成的工作流程如下。
我有一个带有一堆滑块的JQuery UI。每个滑块代码如下所示:
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<div class="rgbw_label"><label for="red_slider">
Red:
</label></div>
<input type="range" id="red_slider" name="red_slider" value="0" min="0" max="255" data-highlight="true" />
</fieldset>
</div>
需要有一些伴随的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 event,但我无法使用它。我也不确定将一些变量发送到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调用函数。
我期待着人们可能对高级问题或解决我在此处列出的更具体问题的方法有所了解。
谢谢!
答案 0 :(得分:1)
以下内容如何:
...
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
...
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<div class="rgbw_label"><label for="red_slider">
Red:
</label></div>
<input type="range" id="red_slider" name="red_slider" class="posting-slider" data-slider-id="1" value="0" min="0" max="255" data-highlight="true" />
</fieldset>
</div>
使用以下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"}))