Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下载开始后执行代码_Javascript_Jquery - Fatal编程技术网

Javascript 下载开始后执行代码

Javascript 下载开始后执行代码,javascript,jquery,Javascript,Jquery,我想添加一个动画加载程序映像,该图像将在用户触发附件下载后出现,并在下载实际启动后消失-当浏览器开始下载文件(或显示下载确认对话框)。原因是附件是在服务器端生成的非常复杂的文档,这需要一些时间,动画加载程序会向用户保证页面正在工作(并在下载开始之前禁用下载按钮) 附件已正确设置Http头 下面是它现在的样子: var link = $("#download-link"); link.click(function () { link.displayLoader(); $(document)

我想添加一个动画加载程序映像,该图像将在用户触发附件下载后出现,并在下载实际启动后消失-当浏览器开始下载文件(或显示下载确认对话框)。原因是附件是在服务器端生成的非常复杂的文档,这需要一些时间,动画加载程序会向用户保证页面正在工作(并在下载开始之前禁用下载按钮)

附件已正确设置Http头

下面是它现在的样子:

var link = $("#download-link");
link.click(function () {
  link.displayLoader();
  $(document).load(link.attr("href"), function () {
    link.hideLoader();
  });
  return false;
});
主要的问题是
load
方法显然没有达到我想要的效果。是否有方法捕获由
窗口触发的实际下载开始。位置更改?

为什么不先显示加载程序图像

如果我现在理解正确的话,问题是您希望加载程序映像在文件开始下载后消失,而目前它在文件完成下载后消失

我认为使用jQuery没有简单的方法,但是如果您直接使用普通的JavaScript
XMLHttpRequest
对象,您将在下载的不同阶段收到几个回调,您可以通过
readyState
属性访问这些回调。

为什么不先显示加载程序映像

如果我现在理解正确的话,问题是您希望加载程序映像在文件开始下载后消失,而目前它在文件完成下载后消失

我认为使用jQuery没有简单的方法,但是如果您直接使用普通的JavaScript
XMLHttpRequest
对象,您将在下载的不同阶段收到几个回调,您可以通过
readyState
属性访问这些回调。

您可以做到的是

禁用整个屏幕,直到下载就绪(服务器端处理)

用户点击下载按钮,用户直接下载文件

大多数下载网站遵循的方法。 例如,Mediafire.com

PS:禁用整个屏幕意味着系统类型对话框。禁用其他选项。

您可以做的是

禁用整个屏幕,直到下载就绪(服务器端处理)

用户点击下载按钮,用户直接下载文件

大多数下载网站遵循的方法。 例如,Mediafire.com


PS:禁用整个屏幕意味着系统类型对话框。禁用其他选项。

我不理解你的问题。加载程序图像是通过
displayLoader()
方法显示的,为了简单起见,我没有将其包含在问题中,但我认为它的名称是不言自明的。他确实想先显示加载程序,他正在这样做。我想问题是,当“下载真正开始”(不管是什么意思)的时候——当浏览器开始下载文件时,他如何隐藏加载程序。对,明白了。“不做我想做的事”有点模棱两可。现在更新答案。很抱歉,我的答案模棱两可,英语不是我的第一语言。我不明白你的问题。加载程序图像是通过
displayLoader()
方法显示的,为了简单起见,我没有将其包含在问题中,但我认为它的名称是不言自明的。他确实想先显示加载程序,他正在这样做。我想问题是,当“下载真正开始”(不管是什么意思)的时候——当浏览器开始下载文件时,他如何隐藏加载程序。对,明白了。“不做我想做的事”有点模棱两可。现在更新答案。很抱歉我的答案模棱两可,英语不是我的第一语言。