0

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

我想要做的:将两个源导出到excel,原始数据和被处理的数据。

一些代码

$('#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
        }
    });
});

这一切都很好,但现在的挑战是:

  1. 单击一个按钮,发送源 json,并使用此数据检索和 excel
  2. 单击一个按钮,发送数据透视 json,并使用此数据检索和 excel

我做了什么:

  1. 将源 json 都传递给控制器​​并像这样接收

def 导出表

@records = params

respond_to do |format|
    format.xls
end

结尾

我已经有一个视图 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  
            }
        });
});

由于这不是回发链接,所以它不会回发我的 xls,更糟糕的是,它甚至没有输入我的 ajax 成功,它直接导致描述错误No conversion from text to xls

建议?

4

3 回答 3

1

JQuery 不支持将“xls”作为数据类型。我认为你可以用'text'替换'xls',它会正常工作,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();

});

然后在您的控制器中,您需要使用

@records = JSON.parse(params[:json_data])
于 2013-08-08T11:53:05.263 回答
0

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

  1. 在我的视图上制作一个隐藏输入文本的表单
  2. 在一个简单的帖子中提交我的表单(没有 ajax)
  3. 单击按钮(在发布之前)将 json 字符串化到输入
  4. 在控制器上读取它ActiveSupport::JSON.decode(value)并像往常一样渲染 format.xls

刚刚对其进行了测试,并且工作正常,可惜这个解决方案不是那么漂亮......我仍然会留下这个开放的人来提出一个更好的解决方案。

对了!

于 2013-08-08T14:45:12.790 回答
-1

您可以使用此处提供的 JSON 到 EXCEL 转换器

于 2016-09-16T22:53:13.697 回答