为什么这个Web2Py ajax调用无法返回变量的值?

时间:2016-01-20 08:16:39

标签: ajax web2py

以下是我的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

那么为什么我会看到字符串&#34;无&#34;在我的目标div(和我的闪光灯)?

感谢您的帮助。我阅读了Web2Py书的第11章,我仍感到困惑。

我真的希望能够传递candidate.id(取决于按下哪一行按钮)和按钮方向到控制器变量。如果有更好的方法,请告诉我。

- 本杰明

1 个答案:

答案 0 :(得分:0)

从web2py文档(重点添加):

  

ajax(url, [name1, name2, ...], target)

     

异步调用url(第一个参数),传递 字段输入 的值,其名称等于列表中的一个名称(第二个参数) ...

在您的代码中,您的第二个参数是['name']。但是,没有名称为&#34; name&#34;的输入字段。在任何地方,所以没有&#34;名称&#34;变量被发布到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访问箭头方向。为&#34; down&#34;创建一个新的URL。按钮,带direction='down'