在ajax post处理文件下载

我有一个JavaScript应用程序需要使用ajax post请求发送到某个URL,然后后端会根据请求中的参数进行相应的工作,生成一个可下载的压缩包,等待下载。必须使用的ajax的原因是这里需要模拟提交表单的动作,因为表单里的数据是在之前查询的时候已经填好的,这里只需要重新将表单里的数据重新提交到新的接口就行,所以必须使用ajax post来实现。但是ajax不能直接支持文件下载,所以在ajax post请求之后,会响应一个json串,里面是需要下载的文件地址,然后再使用js构造form表单进行下载,具体代码如下:
var exportUserDefine = function (e) {
                $.ajax({      
                    type: "POST",      
                    url: "/index.php/input/info_export",     
                    data: $("#_form").serialize(),
                    success: function(response, status, request) {
                        ret_data = JSON.parse(response)
                        path = ret_data['path']
                        filename = ret_data['filename']
                        console.log('path : '+path+"\nfilename : "+filename)
                        console.log('create form...')
                        var form = $('<form method="POST" action="/index.php/input/download_pkg">');
                        form.append($('<input type="hidden" name="path" value="' + path + '">'));
                        form.append($('<input type="hidden" name="filename" value="' + filename + '">'));
                        $('body').append(form)
                        form.submit();
                        $("input[name='export']").prop('disabled', false);
                        $("input[name='export']").val('导出');
                    },
                    beforeSend: function () {
                        console.log("input[name='export'] disabled set true")
                        $("input[name='export']").val('正在导出...');
                        $("input[name='export']").prop('disabled', true);
                    }
                });
            }

 

posted @ 2018-02-22 12:10  lrxing  阅读(1169)  评论(0编辑  收藏  举报