代码之家  ›  专栏  ›  技术社区  ›  Ben Wolski

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

  •  0
  • Ben Wolski  · 技术社区  · 9 年前

    以下是我的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章,我仍然很困惑。

    我真的很想通过候选人。id(取决于按下了哪一行的按钮)和控制器变量的按钮方向。如果有更好的方法,请告诉我。

    --本杰明

    1 回复  |  直到 9 年前
        1
  •  0
  •   Community Bob Smith    4 年前

    从web2py文档中(重点添加):

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

    它异步调用url(第一个参数),传递 现场输入 名称等于列表中的一个名称(第二个参数)。。。

    在代码中,第二个参数是 ['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 ). 您可以通过 request.vars.direction 。为“向下”按钮创建一个新的URL direction='down' .