2017-02-13 9 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を使って個々の値を渡そうとしていますが、代わりに配列を渡しています。だからではなく、「カスタマイズ可能な物流サービスデスク」[ 'の「拡張文脈ベースPROD uctivity」、「フェイス・ツー・フェイスのモジュラー回路」、「多階層の安定イントラネット 」、「品質重視コヒーレント予算管理」 ] '私はただ好きです:'カスタマイズ可能な物流サービスデスク – Arjun

答えて

1

web2pyのAJAX機能(「PROJECT_NAME」機能2番目のパラメータで渡されたname属性を使用してサーバーにhtml要素の値を送信しますあなたのケースでは)、同じ名前のフィールドが複数ある場合は、すべてのフィールドの値を送信します。

だから、あなたは同じ名前のループの多くの分野で作成され、そして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の機能usin

1

あなたは持っている:

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

あなたが投稿する値を抽出するために、そこからフォーム入力要素として「PROJECT_NAME」を指定しています。ただし、同じ名前のページには複数の入力があります。その結果、Ajax関数はすべての値を1つのリストにシリアライズし、リスト全体をポストします。

各入力に固有の名前を付けることができますが、より簡単な解決策があります。隠されたinput要素を使用しているだけで、Ajax関数によって送信される値を保持しているようです。その必要はありません。代わりに、値をAjax URLに直接エンコードすることができます。だから、input要素を取り除くとにあなたのajaxの呼び出しを変更:

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