栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[JS][兼容IE]通过ajax从后台获取数据并直接由JS下载

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[JS][兼容IE]通过ajax从后台获取数据并直接由JS下载

难点:

  • 后端:要用什么样的形式将准备好的data 传递给前端。
  • 前端:如何触发浏览器直接下载,尤其是还要兼容IE

后端用的django:

# 前略
import json
df = pd.Dataframe(XXXX)  # df是准备好的数据,是一个data frame。pd.Dataframe(XXXX) 是随便写的
response = HttpResponse(json.dumps({'status': 0,  # 一个用来标志后台是否有error的状态位,跟download 功能没有关系
                                    'download_data': df.to_csv(encoding='utf_8_sig'),  # !!这里是重点
                                    'download_filename': 'XXX' + datetime.datetime.now().strftime('%m%d%H%M%S') + '.csv'
                                    }), content_type="application/json")

return response

前端:

$.ajax({
    type: 'get',
    url: url,
    traditional:true,
    dataType:'json',
    async:false,
    success:function(result){


        // download raw data to user.
        if (window.navigator.msSaveBlob) {
            // IE - IE 不支持download 属性,所以比较麻烦。
            var download_data = result['download_data'];
                 var blobData = 'uFEFF'  // BOM head, make excel know it is csv.
                 blobData += download_data;
                 var blobObj = new Blob([blobData], {type: "application/octet-stream"});  // 创建blob对象的时候错了好几次,最后发现要再外面套个[]_(:з)∠)_
                window.navigator.msSaveBlob(blobObj, result['download_filename'])
            }
            else{
                 //chrome or other - 页面会直接开始下载
                 var download_data = result['download_data'];
                 var blobData = 'uFEFF'  // BOM head, make excel know it is csv.
                 blobData += download_data;
                 var export_uri = 'data:text/csv;charset=utf-8,'+encodeURIComponent(blobData);
                 var a_obj = document.createElement('a');
                 a_obj.setAttribute("href", export_uri);
                 a_obj.setAttribute("download", result['download_filename']);
                 a_obj.click();

                // document.getElementById('download_link').href = export_uri;  // 如果页面上有a标签,这样做就可以,然后让用户手动点击再下载
            }
        
    }
 });

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号