我有一个工作下拉菜单,我可以使用"提交"将其值发送到一个函数。按钮。然而,它非常笨拙,因为用户总是必须按下按钮,等待页面加载并刷新页面,以便用户丢失所有其他设置"在页面上。我已经明白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]]
如果您需要更多信息,我可以向您展示我尝试的方法的完整代码,但我认为有人可以从这里获取它。
答案 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>