2016-09-23 58 views
0

傳送到控制器動作的功能,我需要從一個視圖控制器操作功能傳輸數據提供一些幫助。我的情況如下: 我有一個帶複選框的表格。每個表條目都對應一個帶請求ID的請求。用戶將選擇一些複選框,然後單擊「批准」按鈕。單擊按鈕時,jQuery腳本必須找到所有選定的請求ID並將它們發送到控制器功能。如何將數據從視圖中使用jQuery在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('|'));  
    }); 
} 

我送數組「IDS」到控制器的功能,然後可以處理使用ID的請求。但我不知道該怎麼做。任何幫助將不勝感激。

更新: 我已經寫在視圖中的Ajax代碼。我一次只發送一個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')) 

請指導我。

回答

0

使用推到push一個值到一個陣列中,加入用定界符陣列,在服務器側分割所得到的數據

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

注:#out應該被隱藏輸入

+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

當您將數據發佈到web2py,結果變量可以在request.post_vars(也可以在request.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 []」,所以要重新trieve在web2py的數組:

def approve_request(): 
    request_ids = request.post_vars['ids[]'] 
相關問題