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 函数中使用更干净的解决方案
我有一个项目列表,我想为每个项目动态生成单独的页面。 我的看法:
{{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 函数中使用更干净的解决方案