【发布时间】:2013-06-05 19:08:14
【问题描述】:
我想实现一个简单的计数器来跟踪文件下载了多少次。我们在这里讨论的是大文件,所以我无法使用 readfile()、fpassthru() 或类似的方法将整个文件加载到 php 的内存中。
另外,对于这个解决方案,我想使用直接链接,然后通过 jQuery.ajax 更新计数器。我之所以选择这种方式,是因为带有 X-Sendfile 的 download.php 对我来说不起作用 - 通常我会收到多次调用脚本以进行一次下载,这完全打乱了我的计数。 (这可能是由于 Chrome 对 favicon 的额外请求,但我不确定。另外,这不是问题。)
这基本上是我的 index.html:
<a href="downloads/bla.zip"><span class="countDownload">bla</span></a>
这是 jQuery:
$(document).ready(function() {
$("body").on("click", ".countDownload", function() {
var filename = $(this).parent().attr("href");
filename = filename.split("/");
filename = filename[filename.length - 1]
var request = $.ajax({
url: "counter.php?file=" + filename
});
request.done(function(msg) {
alert("yes");
});
request.fail(function(jqXHR, textStatus) {
alert("no");
});
// if this is here, ajax works, but download fails
return false;
});
});
如果"return false;"在那里,ajax请求会成功,但是文件下载会被抑制。 如果“返回false;”不存在,ajax 请求将失败(“取消”),但反过来文件下载工作正常。
感谢任何帮助!
【问题讨论】:
-
触发ajax的类基本上没有理由在;我认为它也可能在 中。
-
尝试将其放入
<a>看看会发生什么 -
不会改变任何事情。
标签: php jquery ajax download counter