如何使用JQuery从服务器获取二进制数据?

时间:2014-10-17 15:15:57

标签: javascript jquery binary-data

我尝试使用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;输入',它有效。

任何允许相对路径的建议或替代方案?

2 个答案:

答案 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