【问题标题】:CSV download box not appearing in rails 2.3.11CSV 下载框未出现在 rails 2.3.11
【发布时间】:2012-09-27 04:04:32
【问题描述】:

我正在尝试导出包含一些数据的 csv 文件。在从视图表(jqGrid)中选择一些行并将其导出为 csv 格式后,我正在进行 ajax 调用。问题是在成功调用 ajax 后,过滤后的数据显示为警告消息而不是下载选项?有什么想法吗??

查看代码:

 function x() {

 var obj = jQuery("input:checked").map(function() { return jQuery(this).parents('tr').attr('id'); });

 var arr = jQuery.makeArray(obj);
 var data = arr.join(',');


 $.ajax({
     url : '<%= url_for :action => "export_to_csv" %>',
     type : 'POST',
     data : {data:data},
     dataType : 'json',
         success : function(response) {
           alert("Details saved successfully!!!");
         },
         error : function (request, status, error) {
                alert(request.responseText);
            }       
    });     


      }

控制器代码:

def export_to_csv
 require 'fastercsv'

 data = params['data'].split(',')
 @gos = GoSe.find(:all, :conditions => [ "id IN (?)", data])
 csv = FasterCSV.generate do |line|
 cols = ["ID","Details","PartnerCode","Sece","Date","Partner","Person","TaxName","TaxID"]
 line << cols
 @gos.each do |entry|                
 line << [entry.id, entry.description, entry.code, entry.ellipsis, entry.oDate, entry.name, entry.people_name, entry.tax_name, entry.tax_id ]
     end  
  end

send_data(csv, 
:type => 'text/csv; charset=iso-8859-1; header=present', 
:disposition => "attachment; filename=go_data_#{Time.now.strftime('%d-%m-%y--%H-%M')}.csv") 

end

【问题讨论】:

  • javascript 无法访问文件系统(除非您使用不受广泛支持的新文件编写器 api),因此您永远不会收到使用这样的代码下载文件的提示 -您需要发出正常的非 ajax 请求。

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

随着代码中的以下更新..它的工作..试试看!!

function x() {

var obj = jQuery("input:checked").map(function() { return jQuery(this).parents('tr').attr('id'); });

var myAjaxVariable = null;
var arr = jQuery.makeArray(obj);
var data = arr.join(',');


$.ajax({
 url : '<%= url_for :action => "export_to_csv" %>',
 type : 'POST',
 data : {data:data},
 dataType : 'json',
 async : false,
     success : function(response) {myAjaxVariable = response;},
     error : function (request, status, error) {
            alert(request.responseText);
        }       
  });   

window.open( "data:text/csv;charset=utf-8," + escape(myAjaxVariable))  


}

【讨论】:

  • 上面提到的弗雷德里克是正确的。不可能通过 ajax 请求弹出下载以更具体地使用异步请求。所以我们需要使用 async:false 选项使其同步,然后将所有内容保存在一个变量(全局)中,然后调用一个窗口打开选项。我相信还有其他方法,但这个对我有用。此外,我对它在 IE 中的工作持怀疑态度。这个你可以检查!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多