web2py 如何:Ajax 将下拉菜单的值发送到操作
web2py how to: Ajax to send dropdown menu's value to action
我有一个可用的下拉菜单,我可以使用 "submit" 按钮将其值发送到一个函数。然而,它非常笨拙,因为用户总是必须按下按钮,等待页面加载并刷新页面,因此用户会丢失页面上的所有其他 "settings"。我知道 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 控制台中给我一个奇怪的错误:
Uncaught Error: Syntax error, unrecognized expression: [name=[object HTMLSelectElement]]
如果您需要更多信息,我可以向您展示我尝试过的方法的完整代码,但我认为有人可以从这里获取它。
您可以按如下方式发送变量:
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>
我有一个可用的下拉菜单,我可以使用 "submit" 按钮将其值发送到一个函数。然而,它非常笨拙,因为用户总是必须按下按钮,等待页面加载并刷新页面,因此用户会丢失页面上的所有其他 "settings"。我知道 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 控制台中给我一个奇怪的错误:
Uncaught Error: Syntax error, unrecognized expression: [name=[object HTMLSelectElement]]
如果您需要更多信息,我可以向您展示我尝试过的方法的完整代码,但我认为有人可以从这里获取它。
您可以按如下方式发送变量:
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>