我尝试使用JQuery.get()使用Web API控制器下载二进制数据。
我尝试的代码是:
$.get("../api/Download/Report?Id=" + selectedItem.Id);
在我调试正在运行的应用程序时,使用此URL转换为HTTP GET:
http://localhost:12150/api/Download/Report?Id=2515
浏览器显示200作为结果,接收二进制数据,但它不打开它也不提供下载文件。如果我将URL复制并粘贴到地址栏中并按&# 39;输入',它有效。
任何允许相对路径的建议或替代方案?
答案 0 :(得分:2)
你不应该在这些事情上使用ajax。如果您想强制用户下载响应,那可能会变得混乱。改为打开一个新的标签/窗口;在大多数浏览器中,无论如何它都会关闭,用户甚至不会注意到它是打开的! :)如果您知道您的网址是加载的,您可以简单地使用target="_blank"
- 属性制作一个锚标记。即:
<a href="http://localhost:12150/api/Download/Report?Id=<?=$reportID?>" target="_blank">Download report</a>
(嗯,你知道基本的HTML,但你明白了)
如果您想/需要使用JS,请使用简单的window.open()
:
window.open("../api/Download/Report?Id=" + selectedItem.Id,'_blank');
免责声明:我不知道该相对网址是否真的可以在window.open()
中使用。如果它不仅仅是通过PHP构建URL:
$reportURL = $_SERVER['SERVER_NAME']."/api/Download/Report?Id=";
然后,在你的JS中,只需回应它:
window.open("<?=$reportURL?>" + selectedItem.Id,'_blank');
答案 1 :(得分:0)
使用$.get
只需将返回的请求数据放入您可以在回调中处理的对象中。你需要做的就是让你的api返回下载网址,然后告诉浏览器下载它,</ p>
如何解决此问题,请参阅此答案https://stackoverflow.com/a/5192980/1994767