web2py如何:Ajax将下拉菜单的值发送到操作

时间:2015-09-25 23:51:12

标签: ajax html-select web2py

我有一个工作下拉菜单,我可以使用"提交"将其值发送到一个函数。按钮。然而,它非常笨拙,因为用户总是必须按下按钮,等待页面加载并刷新页面,以便用户丢失所有其他设置"在页面上。我已经明白ajax可以解决这个问题。我阅读了指南:http://www.web2py.com/books/default/chapter/29/11/jquery-and-ajax#The-ajax-function并尝试了一些方法,但它永远不会有效。

所以这是我原来的工作代码。一些内容被剥离和更改,但基本内容是相同的。查看demo.html:

<form action="change_dropdown">
    <select name="tables">
            <option value="first_value">first</option>
            <option value="second_value">second</option>
            <option value="third_value">third</option>
    </select>
    <br><br>
    <input type="submit">
</form>

动作:

def change_dropdown():
    if request.vars.tables:
        session.tables = request.vars.tables
    else:
        session.tables = None
        session.main_warning= "Incorrect parameters for function: 'change_dropdown()'."
    redirect(URL('demo'))
    return

然后原始操作demo会对session.tables执行某些操作,依此类推。但现在关于把它变成ajax。这就是我想要的:

<form>
    <select name="tables", onchange="ajax('change_dropdown', [], '');">
            <option value="first_value">first</option>
            <option value="second_value">second</option>
            <option value="third_value">third</option>
    </select>
</form>

我也对动作执行了此操作:redirect(URL('demo'), client_side=True)如示例中所述。我不知道为什么需要它。

但我不知道如何将变量tables发送给操作。如果我在python URL帮助器中编写它,它会崩溃,因为它认为它是一个python变量(它实际上是一个JavaScript变量(?))。如果我在ajax()函数的第二个参数中写入它,它会停止并在JS控制台中给我一个奇怪的错误:

  

未捕获错误:语法错误,无法识别的表达式:[name = [object HTMLSelectElement]]

如果您需要更多信息,我可以向您展示我尝试的方法的完整代码,但我认为有人可以从这里获取它。

1 个答案:

答案 0 :(得分:1)

您可以按如下方式发送变量:

ajax("{{=URL('change_dropdown')}}",['tables'],':eval') 
需要

redirect(URL('demo'), client_side=True),因为您要将已发送ajax请求的函数重定向到重定向而不是'change_dropdown'重定向。

修改

<form>
    <select name="tables", onchange="ajax(\"{{=URL('change_dropdown')}}\",['tables'],':eval') ;">
        <option value="first_value">first</option>
        <option value="second_value">second</option>
        <option value="third_value">third</option>
    </select>
</form>