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

Posted

技术标签:

【中文标题】如何在 Web2py 中使用 jquery 将数据从视图传输到控制器操作函数【英文标题】:How to transfer data from view to controller action function using jquery in Web2py 【发布时间】:2016-09-23 06:58:34 【问题描述】:

在将数据从视图传输到控制器操作函数时,我需要一些帮助。我的情况如下: 我有一张带复选框的桌子。每个表条目对应一个带有请求 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”发送到控制器函数,然后该函数可以使用 ids 处理请求。但我不知道该怎么做。任何帮助将不胜感激。

更新: 我已经在视图中编写了 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'))

请指导我。

【问题讨论】:

【参考方案1】:

使用push到push一个值到一个数组,用分隔符加入数组,在服务器端拆分结果数据

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

注意:#out 应该是隐藏输入

【讨论】:

嗨。谢谢回复。我已经对代码进行了更改。但我不知道将数据从视图传输到控制器的代码,即我需要使用 URL 调用操作函数。 @AnmolAnand 使用简单的表单提交 或ajax请求 好的。非常感谢【参考方案2】:
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[] )


【讨论】:

嗨。谢谢。我看到我需要使用 ajax 但这不是 ASP.net 代码。我正在使用 python 开发 web2py。但我会做必要的转换。谢谢! 很高兴让我知道需要任何进一步的帮助。【参考方案3】:

当您将数据发布到 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[]']

【讨论】:

以上是关于如何在 Web2py 中使用 jquery 将数据从视图传输到控制器操作函数的主要内容,如果未能解决你的问题,请参考以下文章

Web2py 数据库:如何从选定的行中选择行的子集?以及如何将它传递给 JavaScript?

如何在 web2py 中使用模块?

使用 web2py 将 BLOB 保存到 MySQL

将 MySQL 查询转换为在 web2py DAL 中使用

在 web2py DAL 中查询空值

你如何阅读的web2py的探查产生的.prof文件?