为什么这个 Web2Py ajax 调用无法 return 变量的值?
Why does this Web2Py ajax call fail to return the value of a variable?
这是我的 Web2Py 视图中的相关片段:
{{for candidate in rows:}}
<div class="well col-sm-12">
<button type="button" name="up_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-up arrow-up fa-4x"></button>
<span>{{=candidate.votes}}</span>
<button type="button" name="down_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-down arrow-down fa-4x"></button>
{{=IMG(_src=URL('photos',candidate.path_to_photo), _alt="Photo of Candidate")}}
{{=candidate.name}}
<div id="target"></div>
</div>
{{pass}}
以及来自我的 Web2Py 控制器的相关片段:
def arrow_button_callback():
response.flash = str(request.post_vars.name)
return request.post_vars.name
那么为什么我在我的目标 div(以及我的闪存)中看到字符串 "None"?
感谢您的帮助。我读了 Web2Py 书的第 11 章,但我仍然感到困惑。
我真的希望能够将 candidate.id(取决于按下哪一行的按钮)和按钮方向传递给控制器变量。如果有更好的方法,请告诉我。
--本杰明
来自 web2py 文档(强调已添加):
ajax(url, [name1, name2, ...], target)
It asynchronously calls the url (first argument), passes the values of the field inputs with the name equal to one of the names in the list (second argument)...
在您的代码中,您的第二个参数是 ['name']
。但是,任何地方都没有名称为“name”的输入字段,因此没有“name”变量被发布到 web2py(因此,request.post_vars.name
是 None
,这是您尝试返回的默认值获取 request.post_vars
).
中不存在的变量
在这种情况下,因为您没有在表单输入字段中放置任何数据,所以您可以简单地忽略 ajax()
的第二个参数。相反,通过 URL 本身传递相关数据:
{{url = URL('default', 'arrow_button_callback',
vars=dict(id=candidate.id, direction='up'))}}
<button type="button" name="up_button" onclick="ajax('{{=url}}', [], 'target')"
class="fa fa-caret-up arrow-up fa-4x"></button>
然后在 arrow_button_callback
控制器中,您可以通过 request.get_vars.id
(或只是 request.vars.id
)访问候选人 ID。您可以通过 request.vars.direction
访问箭头方向。使用 direction='down'
.
为“向下”按钮创建一个新的 URL
这是我的 Web2Py 视图中的相关片段:
{{for candidate in rows:}}
<div class="well col-sm-12">
<button type="button" name="up_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-up arrow-up fa-4x"></button>
<span>{{=candidate.votes}}</span>
<button type="button" name="down_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-down arrow-down fa-4x"></button>
{{=IMG(_src=URL('photos',candidate.path_to_photo), _alt="Photo of Candidate")}}
{{=candidate.name}}
<div id="target"></div>
</div>
{{pass}}
以及来自我的 Web2Py 控制器的相关片段:
def arrow_button_callback():
response.flash = str(request.post_vars.name)
return request.post_vars.name
那么为什么我在我的目标 div(以及我的闪存)中看到字符串 "None"?
感谢您的帮助。我读了 Web2Py 书的第 11 章,但我仍然感到困惑。
我真的希望能够将 candidate.id(取决于按下哪一行的按钮)和按钮方向传递给控制器变量。如果有更好的方法,请告诉我。
--本杰明
来自 web2py 文档(强调已添加):
ajax(url, [name1, name2, ...], target)
It asynchronously calls the url (first argument), passes the values of the field inputs with the name equal to one of the names in the list (second argument)...
在您的代码中,您的第二个参数是 ['name']
。但是,任何地方都没有名称为“name”的输入字段,因此没有“name”变量被发布到 web2py(因此,request.post_vars.name
是 None
,这是您尝试返回的默认值获取 request.post_vars
).
在这种情况下,因为您没有在表单输入字段中放置任何数据,所以您可以简单地忽略 ajax()
的第二个参数。相反,通过 URL 本身传递相关数据:
{{url = URL('default', 'arrow_button_callback',
vars=dict(id=candidate.id, direction='up'))}}
<button type="button" name="up_button" onclick="ajax('{{=url}}', [], 'target')"
class="fa fa-caret-up arrow-up fa-4x"></button>
然后在 arrow_button_callback
控制器中,您可以通过 request.get_vars.id
(或只是 request.vars.id
)访问候选人 ID。您可以通过 request.vars.direction
访问箭头方向。使用 direction='down'
.