window.location.href 下载后执行函数
Posted
技术标签:
【中文标题】window.location.href 下载后执行函数【英文标题】:Excuting function after window.location.href download 【发布时间】:2013-10-06 15:54:37 【问题描述】:我有一个使用简单的 window.location.href 命令启动的文件下载。由于我停留在同一个页面上,我想调用一个不同的函数来刷新页面的一部分,但是下载后这个其他函数没有被执行。有没有办法做到这一点? 我想我正在寻找类似 ajax 的“成功”选项。
谢谢!
【问题讨论】:
在window.location.href?
之后你如何停留在同一页面上,你应该正在等待异步调用以完成下载。
不,没有,但是有一些变通方法,使用 ajax 或 cookie 检查下载何时完成,然后执行某些操作。
我停留在同一页面上,因为我将 URL 指向控制器,该控制器将文件返回给我,其中包含内容处置设置和正确的 mime 类型。因此,如果我使用非常简单的 ajax 后调用而不进行任何处理,只需添加 success: function()myfunc(a)
.. 可以吗?
最好的方法可能是下载完成后在服务器端设置一个cookie,然后用javascript不断检查cookie,当检测到cookie时做一些事情。
我认为这次下载不会有那么大的问题。 :) 感谢您的回复!
【参考方案1】:
一个简单的 AJAX 后调用就足够了。特别是对于像文件下载这样的异步和时间可变的东西,XMLHttpRequest
的readyState
属性非常有用。
【讨论】:
简单的ajax调用没有触发另存为窗口。其他一切都很好,我只需要看到那个窗口出现。知道怎么做吗? 你说的是 Content-Type: octet-stream 和 Content-Disposition: attachment? 是的,响应中的所有内容都已正确设置! 您可能想尝试创建一个 iframe 并将其源设置为文件的位置(应该在您的 AJAX 响应中) 我只是在调查这个答案! ***.com/questions/3749231/…【参考方案2】:试试这个:
var req = new XMLHttpRequest();
req.open("POST", "your endpoint", true);
req.responseType = "blob";
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
var fileName = "fileName.pdf";
req.onload = function (event)
var blob = req.response;
if (req.status === 200)
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
//call your method her to do anything
;
req.send();
//if you have any parameter, you can this
//reg.send(param)
【讨论】:
以上是关于window.location.href 下载后执行函数的主要内容,如果未能解决你的问题,请参考以下文章
javaScript使用post方式代替window.location.href
在 Firefox 中更改 window.location.href 而不关闭 websockets
window.location.href=window.location.href 和 window.location.reload() 的区别