从运行Javascript和jQuery Mobile的用户界面Python的CGI脚本(Runni

2019-08-17 02:10发布

我试图完成的工作流程如下。

  • 有与一群范围滑块元件的一个jQuery移动UI。 每一个是用于控制不同的功能。
  • 当用户移动并释放这些滑块中的任何一个,应该触发一个jQuery事件,使得AJAX调用(我不在乎,如果它使用JSON,XML,POST等 - 最快最好)
  • Ajax调用包含什么滑盖信息很感动,以及它的新值(例如:ID = slider1,值= 215)
  • Ajax的执行在CGI bin中读取ID和值,并且控制部分硬件经由串行连接到我树莓PI(覆盆子PI也运行的网络服务器)一个Python脚本。

我有一帮滑块的一个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脚本被正确地执行,并且连接到树莓裨一些硬件是否正常控制。 我知道我应该使用slidestop事件 ,但我不能得到它的工作。 我也不能确定什么是对一些变量发送到python脚本的最佳方式。

我的python脚本是这样的,就是现在!#在/ usr / bin中/蟒蛇

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调用函数。

我期待着这人可能有或高层次的问题,或方式来解决,我已经在这里列出更具体的问题,任何见解。

谢谢!

Answer 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);
        });
    });
});

最后,蟒蛇:

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


文章来源: Running Python CGI Scripts from Javascript and JQuery Mobile UI