2012-01-16 127 views
0

我有一个动态生成excel电子表格的应用程序,这意味着它不会保存为服务器中的文件,我设置内容类型和其他标题,所以它工作正常,我的问题是否可以使用jquery触发下载。这里是什么样子:使用jQuery下载动态生成的内容

def get_xl(self, **search): 
    response.headers['Content-type'] = "application/ms-excel" 
    response.headers['Content-Disposition'] = "attachment;filename=myfile.xls" 
    book = Workbook() 
    ... code that puts stuff in rows ... 
    return book.biff_data() 

这将返回数据,所以当我去我的浏览器的网址时,会触发下载,但是,我需要发布一些数据,这将是,如果一切美好的事物可以用jquery来处理。这是我迄今为止jQuery的身边,我知道都是错的:

var fields = $('#search-form').serializeObject(); 
    if (!fields.length) { 
     alert("Dude, you must search for something."); 
     return false; 
    } 
$.get('/get_xl',fields.data); 

回答

1

而不是使用jQuery为此,请尝试更改get_xl方法接受查询字符串参数,然后使用纯ol'javascript - 这将触发浏览器中的保存/运行下载对话框中的URL设置为/get_xl?params_here

例如

var fields = $.param('#search-form'); 
    if (!fields.length) { 
     alert("Dude, you must search for something."); 
     return false; 
    } 

window.location.href = '/get_xl?' + fields; 
+0

我用这种方法,谢谢。 – 2012-01-17 18:42:35

0

可以通过插入一个表单元素,并附加您要发布或进入隐藏字段中的数据,并触发做到这一点提交活动。

您正在发送的标题将启动下载,并发送Content-Length,以便正确显示下载进度。

+0

好吧,我刚才设置的长度,同样的事情发生:(我可以看到萤火虫的响应,它响应好,但它不会触发下载。 – 2012-01-17 00:09:09

+0

有你想这样做,使用jQuery的任何原因而不是只是将形式指向get_xl? – Callum 2012-01-17 00:13:41

+0

我有一个做大查询的api,表单有2个按钮,一个发布表单并使用ajax返回数据,另一个按钮用于使用相同的参数下载excel文件,它可以在没有jquery的情况下完成,但是能够使用它会很好。 – 2012-01-17 00:20:43

0

我可能会在这里找到一些方法,但我会尝试使用.ajax()函数通过ajax发布表单,并从您要调用的页面接收数据。

$.post('your-excel-gen-page.py', $('#search-form').serialize(), 
     function(data){ 
      if(data.success == true){ 
           // Update iframe using .load() function 
      }else{ 
       // Fail 
      } 
     }, "json"); 

我不是一个Python专业版,但我已经在PDF生成和PHP页面做过这些。当您发布到页面时,它应该调用页面并开始下载文件。如果这不起作用,您可以尝试在页面上使用ajax调用返回的内容填充iframe。这可以通过成功:函数和.load来完成。也许值得尝试一下。