上下文: 我有一个搜索页面,它从一个数据库表中检索数据,并使用一堆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
}
});
});
这一切都很有效,但现在挑战:
我做了什么:
def export_table
@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
建议?
答案 0 :(得分: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])
答案 1 :(得分:0)
与slicepan的讨论让我想到了一个解决方案:
ActiveSupport::JSON.decode(value)
侧的控制器上读取它,并一如既往地呈现format.xls 刚试过它,并且工作正常,可怜这个解决方案并不那么漂亮......我仍然可以让这个开放给有人提出更好的解决方案。
正确!
答案 2 :(得分:-1)
您可以使用可用的JSON到EXCEL转换器here