iframe+表单post方式下载文件

post方式下载文件有很多种方法,其中blob对象方法不兼容ie9,所以我选择iframe+form post方法,可以解决兼容性问题

    var url = serverConfig.product.productListExport;

    var options = {
        url: url,
        data: {
            json: JSON.stringify(params)
        }
    };
    var config = $.extend(true, { method: 'post' }, options);
    var $iframe = $('<iframe id="down-file-iframe" />');
    var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
    $form.attr('action', config.url);
    for (var key in config.data) {
        $form.append("<input type='hidden' name='" + key + "' value='" + config.data[key] + "' />");
    }
    $iframe.append($form);
    $(document.body).append($iframe);
    $form[0].submit();
    $iframe.remove();

测试后发现,以上写法不支持Firefox和Safari,然后发现不用iframe就都好使了,直接post默认会阻塞页面,但是实际测试并没有发现什么问题,最终写法如下:

var vm = this.vm;
            var url = serverConfig.product.productListExport;
            var params = utils.deepCopy({}, vm.productParam);
            
            var options = {
                url: url,
                data: {
                    json: JSON.stringify(params)
                }
            };
            var config = $.extend(true, { method: 'post' }, options);
            var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
            $form.attr('action', config.url);
            $.each(config.data, function (key, value) {
                var $input = $('<input type="hidden"/>').attr({
                    'name': key,
                    'value': value
                });
                $form.append($input)
            });
            $(document.body).append($form[0]);
            $form[0].submit();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本人做php的,最近发现JS真的是博大精深啊,比PHP难.在HTML中,表单是由form元素来表示的,但是在jav...
    linfree阅读 2,235评论 3 17
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,570评论 1 19
  • 译者:颜海镜译文地址:http://yanhaijing.com/css/2014/01/04/the-30-cs...
    IT程序狮阅读 1,512评论 2 9
  • 2017年8月11日,我在澳门整两年。当年21岁的我只想一个人撞南墙,21岁的我以为没有什么事情比追求内心更重要。...
    Vivianandwine阅读 226评论 0 1
  • 元旦刚好是外公的忌日,二姨打电话妈妈,担心说大舅舅没回家,没地方吃午餐,说每个人拿一点钱给小舅舅,在那边吃。老妈说...
    云在波心阅读 475评论 0 2