如何使用Web2py中的jquery将数据从视图传输到控制器动作函数

时间:2016-09-23 06:58:35

标签: javascript jquery ajax view web2py

我需要一些帮助才能将数据从视图传输到控制器动作功能。我的情况如下: 我有一张带复选框的桌子。每个表条目对应一个带有请求ID的请求。用户将选择一些复选框,然后单击“批准”按钮。在单击按钮时,jQuery脚本必须找到所有选定的请求ID并将它们发送到控制器函数。

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

请指导我。

3 个答案:

答案 0 :(得分:0)

使用push push对数组赋值,使用分隔符连接数组,在服务器端分割结果数据

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

注意:#out应隐藏输入

答案 1 :(得分: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[] ){

}

答案 2 :(得分: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 []”,以便在web2py中检索数组:

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