如何从Webpy下拉列表中获取所选项目

时间:2017-02-05 00:54:02

标签: drop-down-menu web.py

我是Webpy的新手。目前,我无法检索下拉菜单中选择的项目,我还没有看到任何帮助。有谁能告诉我如何解决这个问题?

由于

我的python服务器:

import web
import pdb
from matching_tester import *

def make_text(string):
    return string

class tutorial:
    def GET(self):
        form = my_form()
        return render.tutorial(my_form(), "Your text goes here.")
    def POST(self):
        form = my_form()
        form.validates()
        s = form.d.Devices
        print s
        return make_text(s)

if __name__ == '__main__':
    urls = ('/', 'tutorial')
    render = web.template.render('templates/')

    app = web.application(urls, globals())

    my_form = web.form.Form(
                    web.form.Dropdown('Devices', [('1', 'iPhone 4'), 
                                                  ('2', 'iPhone 4S'), 
                                                  ('3', 'iPhone 5')], 
                                                  web.form.notnull,
                                      **{'multiple':None, 'size': 4}),
                    web.form.Dropdown('Country', [('1', 'All'), 
                                                  ('2', 'US'), 
                                                  ('3', 'JP')],        
                                                 web.form.notnull,
                                      **{'multiple':None, 'size': 4})
                    )
    app.run()

我的HTML:

=== tutorial.html ===
$def with (form, text)
<!doctype html>
<html>
    <head>
        <title>Python and AJAX tutorial for beginners with webpy and jQuery</title>
        <link rel="stylesheet" type="text/css" href="/static/tutorial.css" />
        <script type="text/javascript" src="/static/jquery.js"></script>
        <script type="text/javascript">
                                jQuery(document).ready(function() {
                                jQuery(".button").click(function() {
                                        var input_string = $$("input#textfield").val();
                                        jQuery.ajax({
                                                type: "POST",
                                                data: {textfield : input_string},
                                                success: function(data) {                                                    jQuery('#foo').html(data).hide().fadeIn(1500);
                                                },

                                                });
                                        return false;
                                        });
                                });
                        </script>
    </head>
    <body>
        <br>
        <form class="form" method="post">
        $:form.render()
        <input class="button" type="submit" value="send"/>
        </form>
        <br><br>
        <span id="foo">$text</span>
</form>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

你工作太辛苦了:

你的python代码很好。您的HTML没问题,但嵌入式JavaScript是问题所在。

具体来说,您对var input_string = ...的调用很糟糕(并且不必要)。您没有标识为textfield的输入元素。无论如何,你不需要它。

在你的ajax调用中,你发送的是错误的数据,即textfield的值。相反,只需序列化表单并发送该信息。:

jQuery.ajax({
    type: "POST",
    data: jQuery('form').serialize(),  // <-- Here
    success: function (data) {
        jQUery('#foo').html(data).hide().fadeIn(1500);
    },
});