Jquery 将json导出到excel

Jquery 将json导出到excel,jquery,ruby-on-rails,json,export-to-excel,Jquery,Ruby On Rails,Json,Export To Excel,上下文: 我有一个从一个数据库表中检索数据的搜索页面,我使用一堆jquery插件和一些编写的代码将其显示为一个透视表 我想做的事情:将两个源导出到excel,原始数据和数据被视为类似于pivot 某些代码: $('#btn-apply').click(function() { params = buildParams(); //-> json object structure $.ajax({ url: '<%= pivot_apply_path%>

上下文: 我有一个从一个数据库表中检索数据的搜索页面,我使用一堆jquery插件和一些编写的代码将其显示为一个透视表

我想做的事情:将两个源导出到excel,原始数据和数据被视为类似于pivot

某些代码

$('#btn-apply').click(function() {
  params = buildParams(); //-> json object structure

    $.ajax({
        url: '<%= pivot_apply_path%>',
        type: "GET",
        dataType: "html",
        data: params,
        success: function(result) {
            json.source = $.parseJSON(result); //-> original json response and data from acctiverecord
            json.pivot = pivot(json.source.data, params.rows, params.columns, {}); //-> treated data to another json
            html = tableGeneration(json.pivot); //-> generate a table from the treated json and show it
        }
    });
});
结束

我已经有了一个视图export_source.xls.erb,这是我以前导出xls时使用的技术,所有格式都很好。问题是对json调用的响应

$('.export-table').click(function(e) {
        $.ajax({
            url: '<%= pivot_export_table_path%>',
            type: "POST",
            dataType: "xls",
            data: { data: json.pivot },
            success: function(result) {
                //<-  
            },
            error: function (request, status, error) {
                showMessage('error', error); //<- ENDS UP HERE  
            }
        });
});
$('.export table')。单击(函数(e){
$.ajax({
url:“”,
类型:“POST”,
数据类型:“xls”,
数据:{data:json.pivot},
成功:功能(结果){

// JQuery不支持将“xls”作为数据类型。我认为您可以将“xls”替换为“text”,这样就可以了,JQuery不需要理解xls格式

经过一点阅读,似乎唯一的方法是在点击处理程序中动态创建一个表单,然后提交。您需要对数据进行json编码,然后在隐藏字段中提交。类似的方法应该可以实现

$('.export-table').click(function(e) {
  var form_el = $('<form action="<%= pivot_export_table_path%>" method="POST"></form>');
  $('body').append(form_el);
  form_el.append($('<%= token_tag %>');  //if you are using CSRF protection

  var obj = {thing: "sdfjk", things: [1,4,6,6]};

  var input_el = $('<input type="hidden" name="json_data"></input>');
  form_el.append(input_el);
  input_el.val(JSON.stringify(obj));

  form_el.submit();

});

与slicedpan的讨论让我想到了一个解决方案:

  • 在我的视图上创建一个隐藏输入文本的表单
  • 在一篇简单的帖子中提交我的表单(无ajax)
  • 点击按钮(在post之前)将json字符串化放在输入上
  • 在控制器上使用
    ActiveSupport::JSON.decode(value)
    端读取它,并一如既往地呈现format.xls
  • 刚刚测试过,效果很好,皮蒂,这个解决方案不是很好…我还是会把它留给别人,让他们想出更好的解决方案


    很好!

    您可以使用可用的JSON-to-EXCEL转换器

    当然,如果我用文本替换“xls”或删除它,我进入了成功例程,仍然没有下载我期望的EXCEL。“结果”是EXCEL内容字符串…下载EXCEL:)哦,对了,您不需要使用ajax。在这种情况下,您只需添加一个指向url的链接,该url映射到正确的控制器操作(如果您不希望浏览器尝试渲染,也可以将配置设置为附件)您可以在单击某个链接时动态更改其href属性,但我发现您正在使用POST,因此无法使用。让我尝试一个实验,您以前是如何下载xls文件的?这是一个死链接,您应该在此处提供答案,因为出现了类似的情况。转到bitbucket上的用户名kylo_ren,您会找到它。Sorry表示死链接。
    $('.export-table').click(function(e) {
      var form_el = $('<form action="<%= pivot_export_table_path%>" method="POST"></form>');
      $('body').append(form_el);
      form_el.append($('<%= token_tag %>');  //if you are using CSRF protection
    
      var obj = {thing: "sdfjk", things: [1,4,6,6]};
    
      var input_el = $('<input type="hidden" name="json_data"></input>');
      form_el.append(input_el);
      input_el.val(JSON.stringify(obj));
    
      form_el.submit();
    
    });
    
    @records = JSON.parse(params[:json_data])