【问题标题】:Check download time with ajax? [closed]用ajax检查下载时间? [关闭]
【发布时间】:2013-01-09 08:40:14
【问题描述】:

我想下载一个 512 kb 的文件并检查下载时间。 我使用以下代码,但它只检查网站的响应时间,而不是等到整个文件下载完毕。如何查看整个文件的下载时间?

var start = new Date();  
$.ajax ({
    url: 'https://www.example.com/512kb',
    cache: false,
    success : function()
    {
        var total=(new Date() - start)  
    },
    error : function(jqxhr, status, ex) {}   
});

编辑:当我在本地 PC 上运行网站时,Internet Explorer 正在等待所有文件下载完毕,而 Firefox 和 chrome 则没有。如果我把所有行为都放到服务器上,而不是等待所有文件。为什么只是在本地 Internet Explorer 的行为是这样的?

【问题讨论】:

标签: javascript html ajax jquery


【解决方案1】:

您似乎没有将total 变量用于任何事情。因为它是在success回调函数中定义的,所以它只存在于该函数中,因此在函数返回时会丢失。

以下代码显示了一个警告框,其中包含完成 ajax 调用所需的时间和检索到的数据的长度:

var start = new Date();
var total;
$.ajax ({
    url: 'http://fiddle.jshell.net/',
    cache: false,
    success : function(data)
    {
        total=(new Date() - start);
        alert('total: ' + total + ' len: ' + data.length);
    },
    error : function(jqxhr, status, ex) {}   
});

http://jsfiddle.net/WkKE2/2/

【讨论】:

  • 我在很多事情上都使用了总变量。在这个问题上,我专注于方法。
  • 成功回调是在HTTP GET请求响应时执行,而不是在文件下载完成时执行。
  • @user1874941 在问题中,在success 回调函数中有var total = ...,这意味着创建了一个total 变量以在该函数中使用。创建的这个total 变量将隐藏任何其他暴露给success 回调函数的total 变量。可能你只需要从你的回调函数中删除var关键字。
  • @FerCa 根据jQuery API documentationsuccess回调函数的第一个参数是返回的数据。我不明白如果数据没有完成下载,success 回调函数将如何触发。 API 文档摘录:请求成功时调用的函数。该函数获得三个参数:从服务器返回的数据,...
【解决方案2】:

在 javascript 中没有办法做到这一点。但是您会在这个 stackoverflow 问题中找到一些解决方法:Browser event when downloaded file is saved to disk

编辑:另一个 stackoverflow 问题的答案是更好和更简单的方法:detecting when the "File download" popup is closed,基本上您将下载链接定位到页面中隐藏的 iframe 并为此 iframe 使用 onload 事件。

【讨论】:

  • 谢谢,但如果速度测试网页无法测量带宽。我知道他们正在下载文件并在我尝试时检查时间。
  • 他们中的大多数使用 Flash 或 Java 小程序来执行此操作。
  • 这个带有 HTML5 的网站怎么样? www.bandwidthplace.com
  • 我已经编辑了这个问题。也许它可以对这个问题提出另一个想法......
  • 我已经编辑了我的答案,我过去使用过这种隐藏的 iframe 方法,我忘记了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
相关资源
最近更新 更多