Web2py AJAX 值

Web2py AJAX value

我有一个项目列表,我想为每个项目动态生成单独的页面。 我的看法:

{{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 ']

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

如有任何建议,我们将不胜感激!

你有:

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

您已将 "project_Name" 指定为要从中提取值的表单输入元素 post。但是,页面上有多个输入都具有相同的名称。结果,Ajax 函数将它们的所有值序列化到一个列表中,并且 post 是整个列表。

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

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

web2py ajax 函数向服务器发送 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 函数中使用更干净的解决方案