问题描述
我在视图中有一个项目列表,我想为每个页面动态生成单独的页面。 我的观点:
{{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 ']
为什么我收到所有项目名称的数组作为输出? 我只想确定每个项目。
任何建议表示赞赏!
1楼
你有:
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')
2楼
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函数中使用更干净的解决方案