2016-09-23 12 views
0

ビューからコントローラアクション関数にデータを転送する際に助けが必要です。私の場合は次の通りです: 私はチェックボックス付きのテーブルを持っています。各テーブルエントリは、要求IDを持つ要求に対応します。ユーザーはいくつかのチェックボックスを選択し、「承認」ボタンをクリックします。ボタンをクリックすると、jQueryスクリプトは選択されたすべてのリクエストIDを見つけてコントローラ機能に送信する必要があります。Web2pyでjqueryを使用してビューからコントローラへのデータ転送方法

function get_selected_req(){ 
    var ids = []; 
    jQuery('#sortTable1 tr').has(":checkbox:checked").each(function() { 
     var $row = $(this).closest("tr");// Finds the closest row<tr> 
     $tds = $row.find("td:nth-child(2)"); // Finds the 2nd <td> element 
     ids.push($tds.text()); 
     $('#out').text(ids.join('|'));  
    }); 
} 

Iは、次にIDを使用して要求を処理することができるコントローラ機能に配列「IDS」を送信する必要が:

ここでjQueryのコードです。しかし、私はそれをどうやって行うのか分かりません。どんな助力も高く評価されます。

更新: 私はビューにajaxコードを書いています。私は一度に1つのIDだけを送信しています。コードは次のようになります。

$.ajax({ 
       type: 'POST', 
       url: "{{=URL(r=request, c='admin',f='approve_request')}}", 
       data: $tds.text(), 
       success: function(data){ alert('yay'); 
             tab_refresh(); 
             check_resource(data); 

             } 
      }); 

コントローラ内のデータを解析する方法がちょっと残っています。コードは次のとおりです。

def approve_request(): 
    request_id=request.args[0] 
    enqueue_vm_request(request_id); 
    session.flash = 'Installation request added to queue' 
    redirect(URL(c='admin', f='list_all_pending_requests')) 

私をご案内してください。 #out入力

答えて

0

アレイへpushに使用するプッシュ値は、区切り文字でアレイに参加するには、サーバー側

ids.push($tds.text()); 
$('#out').text(ids.join('|')); 

ノートに結果のデータを分割しました結果を変数request.post_varsrequest.vars、これはrequest.post_varsrequest.get_varsの組み合わせでもあります)で見つけることができます。適切な形式でデータを送信するには、単一の値または配列ではなくJavascriptオブジェクトを送信する必要があります(オブジェクトのキーはrequest.post_varsのキーになります)。

一度に単一idを送信する場合:

$.ajax({ 
    ..., 
    data: {id: $tds.text()}, 
    ... 
}); 

を次に、あなたのweb2pyのコントローラで:

def approve_request(): 
    request_id = request.post_vars.id 

のIDの配列を送信するには:

$.ajax({ 
    ..., 
    data: {ids: ids}, 
    ... 
}); 

注意、上記のようにjQuery経由で配列を送信すると、jQueryはキーを "ids"から "ids []"に変換します。 web2pyの配列を調べてください:

def approve_request(): 
    request_ids = request.post_vars['ids[]'] 
+0

こんにちは。返信いただきありがとうございます。私はコードを変更しました。しかし、データをビューからコントローラに転送するコードはわかりません。つまり、URLを使用してアクション関数を呼び出す必要があります。 –

+0

@AnmolAnand簡単なフォームを使用して – madalinivascu

+0

またはajaxリクエスト – madalinivascu

0
You can pass any value to function by simply calling a function in javascript. 

Client side: 

$.ajax({ 
    type: "POST", 
    url: "HomePage/HandleOperations", 
    data: {operations: operationCollection}, 
    success: function (data) { alert("SUCCESS"); } 
}); 

and declare a class server side like this: 

public class Operation 
{ 
    public int Index[]; 
    } 

then you can have this action: 

public void HandleOperations(Operation[] operations) 
{ 
} 

else you can try this option 

var selectedCatId = $(this).val(); 
       var details = baseUrl+"/controllername/controllerfunctionname/"+selectedCatId; 

and in controller 

public function controllerfunctionname(array of ids[]){ 

} 
+0

こんにちは。ありがとう。私はajaxを使用する必要があることがわかりますが、このASP.netコードではありません。私はPythonでweb2pyに取り組んでいます。しかし、私は必要な変換を行います。ありがとう! –

+0

私はそれ以上の助けが必要であることを大変嬉しく思います。 –

0

隠さなければならない:

関連する問題