2017-02-13 25 views
0

У меня есть список проектов на мой взгляд, и я хотел бы динамически генерировать отдельные страницы для каждого из них. Мое мнение:Web2py Значение 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 '] 

Почему я получаю массив всех имен проекта в качестве продукции? Я просто хочу определить каждый проект.

Любые советы приветствуются!

+0

его не ясно, что вы пытаетесь достичь, можете ли вы, более подробно о поведении, которое вы ищете? – Cesar

+0

Эй! Я пытаюсь передать отдельные значения, используя AJAX, но вместо этого он передает массив. Таким образом, вместо '['Настраиваемый логистический сервисный стол', 'Расширенный контекстно-зависимый код uctivity', 'Лицевая модульная схема', 'Многоуровневая стабильная интрасеть ', 'Координированное бюджетное управление, ориентированное на качество' ] 'Я бы хотел просто:« Настраиваемый логистический сервисный стол » – Arjun

ответ

1

Функция web2py Аякса посылает на сервер значение элемента 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

1

Вы имеете:

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

Вы указали «PROJECT_NAME» в качестве формы входного элемента, из которого для извлечения значения к сообщению. Однако на странице есть несколько входов с таким же именем. В результате функция Ajax преобразует все свои значения в один список и публикует весь список.

Вы можете дать каждому вводу уникальное имя, но есть более простое решение. Похоже, вы используете скрытые элементы input только для хранения значений, которые должны быть отправлены функцией Ajax. В этом нет необходимости - вместо этого вы можете просто кодировать значения непосредственно в URL-адресе Ajax. Таким образом, избавиться от input элементов и изменить свой ajax вызов:

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