javascript – 使用jQuery和iFrame下载文件

前端之家收集整理的这篇文章主要介绍了javascript – 使用jQuery和iFrame下载文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码下载.csv文件
$.ajax({
            url: urlString,contentType: "application/json; charset=utf-8",dataType: "json",cache: false,success: function (data) {
                if (data) {
                    var iframe = $("<iframe/>").attr({
                        src: data,style: "visibility:hidden;display:none"
                    }).appendTo(buttonToDownloadFile);
                } else {
                    alert('Something went wrong');
                }
            }
        });

urlString指向生成.csv文件的RESTful服务,并返回分配给iFrame的src属性文件路径.这适用于任何.csv文件,但我有.xml文件的问题.当我使用相同的代码,但将contentType更改为“text / xml”,并使用它来下载.xml文件,这不起作用.

我可以在这里使用与.xml文件相同的方法吗?

更新:

感谢Ben指出我正确的方向.原来我完全不需要ajax电话.相反,我可以使用iFrame及其url属性调用Web服务,这将生成内容,添加头(Content-Disposition)并返回流.

解决方法

我猜想大多数浏览器会尝试在浏览器本身渲染XML,而他们往往没有CSV的处理程序,所以他们会自动默认提示用户下载该文件.尝试修改XML文件标题以强制下载.像(PHP示例)
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition: attachment; filename="some filename"');

这应该告诉大多数浏览器不要尝试打开文件,而是让用户下载文件,让操作系统确定该怎么做.

如果您无权控制XML文件中的标题,则可以使用服务器端脚本来尝试使用其他方法.使用JS将URL传递到服务器端脚本:

//build the new URL
var my_url = 'http://mysite.com/load_file_script?url='+escape(path_to_file);
//load it into a hidden iframe
var iframe = $("<iframe/>").attr({
                        src: my_url,style: "visibility:hidden;display:none"
                    }).appendTo(buttonToDownloadFile);

在服务器端(您的http://mysite.com/load_file_script脚本),您可以使用cURL / file_get_contents / wgets / [获取远程文件的其他一些机制]来抓取远程文件内容,添加Content-Disposition :附件标题,并打印原始文件代码.

猜你在找的jQuery相关文章