Jquery 将json导出到excel
上下文: 我有一个从一个数据库表中检索数据的搜索页面,我使用一堆jquery插件和一些编写的代码将其显示为一个透视表 我想做的事情:将两个源导出到excel,原始数据和数据被视为类似于pivot 某些代码: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%>
$('#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])