2017-02-13 48 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傳遞各個值,但是它正在傳遞一個數組。因此,不是'['可定製的物流服務檯','擴展的基於內容的產品','面對面模塊化電路','多層穩定內聯網 ','質量爲中心的相關預算管理' ]'我想只是:'可定製的物流服務檯' – Arjun

回答

1

web2py的AJAX功能向服務器發送的HTML元素的值與功能第二個參數傳遞(「PROJECT_NAME」的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功能

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')