我在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);
答案 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。可能值得一试。