这是一个值得思考的人......
我创建了一个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脚本返回的数据下载文件?
答案 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>
解决了上面提到的下载问题。
数据库更新,浏览器启动下载,我再次成为一个快乐的小编码器:)
感谢大家的投入!