关于Ajax无法下载文件到浏览器本地的问题

前端之家收集整理的这篇文章主要介绍了关于Ajax无法下载文件到浏览器本地的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近在做网站的时候遇到这样一个功能,在如图所示的页面中,需要用户点击链接的时候,能够以异步Ajax的方式判断服务器中是否存储有相应的Excel文件,如果没有的话就提示用户没有找到,如果有的话就下载到用户本地。



当然,这是很简单的一个问题,按照一般方式编写Ajax就可以了。但是当服务器端把文件内容以二进制的形式返回到浏览器端,浏览器的Ajax却抛出了错误。大致是ParseError,Invalid XML PK一类的错误信息。


造成这个问题的原因,并不是服务器端代码或者javascript代码有问题,而是通过Ajax下载文件的这种方式本来就是禁止的。出于安全因素的考虑,javascript是不能够保存文件到本地的,所以ajax考虑到了这点,只是接受xml,ajax,json格式的返回值,二进制的返回格式就会抛出这个异常。

如何解决这个问题?用window.location = url的方式就可以了。有人会问,像上图这样的需求,在某个页面的时候点击下载链接,因为改变了window.location的值,岂不是当前页面就要被跳转了?事实是,我用的是Chrome浏览器,当点击那个link的时候,直接就弹出了这边的下个文件保存的对话框,而且页面地址栏也没有任何变化。这时候如果点击Save文件就会保持,点击Cacel,操作就会取消,过程中当前页面会一直保持,不会跳转到其他页面



转自个人博客 www.sunrobin.net

原文链接:https://www.f2er.com/ajax/162315.html

猜你在找的Ajax相关文章