下载计数器


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>可以解决上述下载问题。数据库更新了,浏览器开始下载,我又成为一个快乐的小程序员了:)

谢谢大家的意见!