【问题标题】:Excuting function after window.location.href downloadwindow.location.href 下载后执行函数
【发布时间】: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时做一些事情。
  • 我认为这次下载不会有那么大的问题。 :) 感谢您的回复!

标签: javascript jquery function download


【解决方案1】:

一个简单的 AJAX 后调用就足够了。特别是对于像文件下载这样的异步和时间可变的东西,XMLHttpRequestreadyState 属性非常有用。

【讨论】:

  • 简单的ajax调用没有触发另存为窗口。其他一切都很好,我只需要看到那个窗口出现。知道怎么做吗?
  • 你说的是 Content-Type: octet-stream 和 Content-Disposition: attachment?
  • 是的,响应中的所有内容都已正确设置!
  • 您可能想尝试创建一个 iframe 并将其源设置为文件的位置(应该在您的 AJAX 响应中)
  • 我只是在调查这个答案! stackoverflow.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)

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多