当前位置: 代码迷 >> python >> Web2py AJAX值
  详细解决方案

Web2py AJAX值

热度:49   发布时间:2023-06-13 15:18:41.0

我在视图中有一个项目列表,我想为每个页面动态生成单独的页面。 我的观点:

{{for i in project_list:}} 
<ul>
  <input id="hello" type="hidden" value="{{response.write(i)}}" name="project_Name">
  <li><a onclick="ajax('{{=URL('default', 'view_project')}}', ['project_Name'], 'target');">View Project</a></li>
</ul>
{{pass}}

我的控制器:

def view_project():
    print request.vars.project_Name
    return dict(name=request.vars.project_Name)

本质上,我想通过其project_Name标识每个项目。

这是控制器的电流输出:

['Customizable logistical service-desk ', 'Extended contextually-based prod
uctivity ', 'Face-to-face modular circuit ', 'Multi-tiered stable intranet
', 'Quality-focused coherent budgetary management ']

为什么我收到所有项目名称的数组作为输出? 我只想确定每个项目。

任何建议表示赞赏!

你有:

ajax('{{=URL('default', 'view_project')}}', ['project_Name'], 'target')

您已将“ project_Name”指定为表单输入元素,可从中提取要发布的值。 但是,页面上有多个输入都具有相同的名称。 结果,Ajax函数将其所有值序列化为一个列表,然后发布整个列表。

您可以给每个输入一个唯一的名称,但是有一个更简单的解决方案。 看来您在使用隐藏的input元素只是为了保留要由Ajax函数发送的值。 无需这样做-相反,您可以直接在Ajax URL中直接编码值。 因此,摆脱input元素并将ajax调用更改为:

ajax('{{=URL('default', 'view_project', vars=dict(project_name=i)}}', [], 'target')

web2py ajax函数将具有name属性的html元素的值发送到服务器,该html元素的值在函数第二个参数中传递(在您的情况下为“ project_Name”),但是如果有多个同名字段,它将发送所有这些的价值。

因此,您正在循环创建许多具有相同名称的字段,而ajax函数会将所有值发送到服务器。

您可以解决将计数变量附加到每个字段名称(及其名称在其onclick属性上)的问题:

{{count = 1}}
{{for i in project_list:}} 
<ul>
  <input id="hello" type="hidden" value="{{response.write(i)}}" name="project_Name{{=count}}">
  <li><a onclick="ajax('{{=URL('default', 'view_project')}}', ['project_Name{{=count}}'], 'target');">View Project</a></li>
</ul>
{{count += 1}}
{{pass}}

或在JQuery ajax函数中使用更干净的解决方案

  相关解决方案