使用ajax下载flaskexcel

使用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发送到flask,并想将这些数据下载到用户端的excel文件中。 ajax正在发送数据,我也可以打印这些数据,但flask没有将此excel文件发送到浏览器。 如果我获取任何数据,无ajax flask也可以工作并发送excel文件,但我想使用ajax发布数据并获取excel文件。请帮助解决此问题

 **#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):