使用ajax下载flaskexcel
我想将数据从ajax发送到flask,并想将这些数据下载到用户端的excel文件中。 ajax正在发送数据,我也可以打印这些数据,但flask没有将此excel文件发送到浏览器。 如果我获取任何数据,无ajax flask也可以工作并发送excel文件,但我想使用ajax发布数据并获取excel文件。请帮助解决此问题使用ajax下载flaskexcel,ajax,flask,Ajax,Flask,我想将数据从ajax发送到flask,并想将这些数据下载到用户端的excel文件中。 ajax正在发送数据,我也可以打印这些数据,但flask没有将此excel文件发送到浏览器。 如果我获取任何数据,无ajax flask也可以工作并发送excel文件,但我想使用ajax发布数据并获取excel文件。请帮助解决此问题 **#ajax script** $('#download').click(function() { var date1 ={}; date1= window.
**#ajax script**
$('#download').click(function() {
var date1 ={};
date1= window.fordownload;
alert(date1);
$.ajax({
url: '/downloads',
type: "POST",
data: date1,
contentType: "application/json; charset=utf-8",
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
});
**#flask code**
@app.route('/downloads', methods=['GET','POST'])
def downloadData():
try:
json_data = request.get_json('date1')
print(json_data)
df_1 = pd.DataFrame(json_data)
print(df_1)
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
df_1.to_excel(writer, startrow=0, merge_cells=False, sheet_name="Sheet_1", index=False)
workbook = writer.book
worksheet = writer.sheets["Sheet_1"]
format = workbook.add_format()
format.set_bg_color('#eeeeee')
worksheet.set_column(0, 9, 28)
writer.close()
output.seek(0)
return send_file(output, attachment_filename="testing.xlsx", as_attachment=True)
except Exception as e:
return (str(e))
它将数据从ajax发布到flask,但是我已经遇到了这个问题,当您在ajax中发出文件请求时,您需要处理响应,这是我的代码:
this.$http.get(URL.SENSOR_DATA_DOWNLOAD, {
params: this.getParms
},
).then(function (response) {
try {
let headerLine = response.headers['content-disposition'];
let startFileNameIndex = headerLine.indexOf('"') + 1;
let endFileNameIndex = headerLine.lastIndexOf('"');
let filename = headerLine.substring(startFileNameIndex, endFileNameIndex);
const type = response.headers['content-type'];
const blob = new Blob([response.data], {type: type, encoding: 'UTF-8'});
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
} catch (e) {
console.log(e);
}
this.loading = false;
}).catch(() => {
this.loading = false;
});
我使用的是axios,但响应回调与ajax相同(函数(响应)部分)。基本上,我获取文件名和文件数据(blob部分),并将其放入一个链接中自动下载。如果您也需要后端部分(在本例中我使用flask csv):
我已经遇到了这个问题,当您在ajax中发出文件请求时,您需要处理响应,这是我的代码:
this.$http.get(URL.SENSOR_DATA_DOWNLOAD, {
params: this.getParms
},
).then(function (response) {
try {
let headerLine = response.headers['content-disposition'];
let startFileNameIndex = headerLine.indexOf('"') + 1;
let endFileNameIndex = headerLine.lastIndexOf('"');
let filename = headerLine.substring(startFileNameIndex, endFileNameIndex);
const type = response.headers['content-type'];
const blob = new Blob([response.data], {type: type, encoding: 'UTF-8'});
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
} catch (e) {
console.log(e);
}
this.loading = false;
}).catch(() => {
this.loading = false;
});
我使用的是axios,但响应回调与ajax相同(函数(响应)部分)。基本上,我获取文件名和文件数据(blob部分),并将其放入一个链接中自动下载。如果您也需要后端部分(在本例中我使用flask csv):