post方式下載文件有很多種方法豺总,其中blob對(duì)象方法不兼容ie9,所以我選擇iframe+form post方法信认,可以解決兼容性問(wèn)題
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();
測(cè)試后發(fā)現(xiàn)惧磺,以上寫(xiě)法不支持Firefox和Safari,然后發(fā)現(xiàn)不用iframe就都好使了赏寇,直接post默認(rèn)會(huì)阻塞頁(yè)面吉嫩,但是實(shí)際測(cè)試并沒(méi)有發(fā)現(xiàn)什么問(wèn)題,最終寫(xiě)法如下:
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();