[英]Download counter
这是一个值得考虑的...
我创建了一个jQuery&PHP过程,该过程使我可以计算文件下载的次数。
更新!
阅读答案后的新 jQuery代码:
$(document).on('click', 'a.download', function() {
var id = $(this).attr('id');
var act = 'downloaded';
request = $.ajax({
url: "view/jquery/player.doitem.php",
type: "post",
data: { id : id, act : act },
dataType: "json"
});
request.done(function(data) {
window.location(data.download);
});
});
新的 PHP代码:
$id = intval($_POST['id']);
$act = $_POST['act'];
$sql = "update media set " . $act . "=" . $act . "+1 where id='" . $id . "' limit 1";
$main->query($sql);
$sql = "select * from media where id='" . $id . "' limit 1";
$result = $main->query($sql);
$row = mysqli_fetch_array($result);
$title = $row['title'];
$srctype = $row['source_type'];
$filename = $row['filename'];
$srcuri = $main->getSrcUri($srctype, $filename);
$download = $main->getSiteConfig("media_ext_src") . "/" . $main->getSiteConfig("media_ext_dir") . "/download.php?file=" . $filename;
$data = array("srcuri" => $srcuri, "title" => $title, "download" => $download);
$data = json_encode($data);
echo $data;
每次单击下载链接时,下载计数器都会正常运行,PHP脚本将被触发并更新数据库。 但这并没有开始实际的下载。 我以为使用window.location()
会触发浏览器开始下载,但事实并非如此。
如何告诉jQuery使用PHP脚本返回的数据下载文件?
正如Barman在其评论中正确指出的那样,单击链接不仅会执行$.post()
,而且还会跟随该链接。 发出警报会延迟该链接的链接,因此将执行该帖子。 否则,它会中断。 为了防止所有这些情况发生,请使您的函数返回false
,因此不会跟随该链接:
$(document).on('click', 'a.download', function() {
var id = $(this).attr('id');
$.post("view/jquery/player.itemdload.php", { id: id });
return false; // don't follow the link's href
});
但是请注意,现在您将不再需要重新加载页面。 因此,您不会直接看到该值已增加。 考虑让您的player.itemload.php返回新值,并使用ajax
代替post
。
如果生活中的一切都像编码一样容易...
弄清楚,使用另一个stackoverflow线程中建议的不可见<iframe>
可以解决上述下载问题。 数据库已更新,下载由浏览器启动,我又是一个快乐的小程序员:)
感谢大家的投入!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.