使用jquery下载动态生成的内容

时间:2012-01-16 23:18:16

标签: jquery python

我在turbogears中有一个应用程序动态生成excel电子表格,这意味着它不会保存为服务器中的文件,我设置了内容类型和其他标题,所以它工作正常,我的问题是,如果有可能使用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()

这会返回数据,所以当我在浏览器上访问url时会触发下载,但是,我需要发布一些数据,如果可以使用jquery处理所有内容,那将会很好。这就是我到目前为止在jquery方面所做的事情,我知道这一切都是错的:

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

3 个答案:

答案 0 :(得分:1)

不要使用jQuery,而是尝试更改get_xl方法以接受查询字符串参数,然后使用普通ol'javascript将URL设置为/get_xl?params_here - 这将触发Save / Run在浏览器中下载对话框。

e.g。

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

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

答案 1 :(得分:0)

您可以通过插入表单元素并将要POST或GET的数据附加到隐藏字段并触发提交事件来完成此操作。

您发送的标题会启动下载,也会发送内容长度,以便正确显示下载进度。

答案 2 :(得分: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。这可以通过成功完成:function和.load。可能值得一试。