【问题标题】:Using window.open(url,"_self") opens download window, but not GET request使用 window.open(url,"_self") 打开下载窗口,但不是 GET 请求
【发布时间】:2015-11-18 17:42:06
【问题描述】:

我了解打开带有 URL 的新窗口实质上会针对该指定 URL 发出 GET 请求。我有一个 URL,当使用 window.open() 打开时,会触发浏览器下载。但是,当我通过 AJAX 发出实际的 GET 请求时,为什么响应没有触发浏览器下载?

【问题讨论】:

  • “但是,当我通过 AJAX 发出实际的 GET 请求时,为什么响应不会触发浏览器下载?” window.open() 不会以响应作为第一个参数来调用,location.href是不是改成回复了?如果窗口不处理协议,则在调用 window.open() 时打开“保存文件”对话框。从 ajax 调用收到响应时的预期结果是什么?

标签: javascript java ajax get


【解决方案1】:

您只能通过将浏览器选项卡重定向到下载 URL 来触发浏览器下载,使用 AJAX 请求是不可能的。

当浏览器(如:在浏览器标签中加载的当前 URL)访问一个 URL 时,处理响应是浏览器的责任。对于文件下载,处理响应的适当操作是显示下载对话框。但是,当您通过 AJAX 执行 GET 请求时,处理响应是您的责任,而不是浏览器的责任。响应可能包含任何数据,而且大多数时候浏览器甚至无法理解这些数据的含义。


如果您想要实现的是延迟下载开始(如 SourceForge 和其他人所做的)或向您显示下载后页面然后开始下载,这可以通过重定向到下载后页面来实现,并在那里启动一个Javascript计时器,然后将浏览器(不仅仅是AJAX,而是window.location)重定向到下载URL。浏览器通常处理此问题的方式是,下载后页面将保持加载状态,您将看到一个下载对话框。

【讨论】:

  • 所以为了让 AJAX 响应触发下载,我必须设置一些 Header 类型并修改响应?如果 URL 涉及查询参数,这是否仍会触发具有适当文件名的下载?
  • 如果您需要 AJAX 响应来触发下载,您需要发送某种响应,您的客户端 Javascript 代码将解释为触发下载的指令,并且客户端 Javascript 代码不会将整个浏览器选项卡重定向到所需的下载 URL。
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 2018-07-07
  • 1970-01-01
  • 2013-04-04
  • 2020-06-21
  • 1970-01-01
  • 2013-12-10
  • 2013-11-29
相关资源
最近更新 更多