繁体   English   中英

下载柜台

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM