下载柜台

时间:2014-05-27 10:37:12

标签: php jquery

这是一个值得思考的人......

我创建了一个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脚本返回的数据下载文件?

2 个答案:

答案 0 :(得分:2)

正如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

答案 1 :(得分:0)

如果生活中的一切都像编码一样简单......

想出使用另一个stackoverflow线程中提出的不可见<iframe>解决了上面提到的下载问题。 数据库更新,浏览器启动下载,我再次成为一个快乐的小编码器:)

感谢大家的投入!