为什么这个 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.nameNone,这是您尝试返回的默认值获取 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