任何人都可以帮助我,我正在尝试为我的网站创建一个下载计数器。 当用户点击下载链接时,我有一个ajax脚本,数量增加1,我遇到的问题是在完成ajax计数脚本之前,它会进入下载链接。 有一种方法可以在脚本完成后重定向到下载文件。目前我有如下
这是链接: -
<a href='downloads/".$downfile."' onclick=\"Counter('$referid');\"'>Download File</a>
这是反脚本: -
<script type="text/javascript">
function Counter(id)
{
$.get("clickcounter.php?id="+id);
{
return false;
}
}
</script>
这是php脚本(clickcounter.php)
<?php
include('dbutils.php');
$referid = $_GET['id'];
$q = "SELECT * FROM downloads WHERE downid =".$referid;
$r = mysql_query($q);
while ($row = mysql_fetch_array($r))
{
$click = stripslashes(trim($row['downcount']));
$download = $row['downfile'];
}
$countup = $click + 1;
$qUpdate = "UPDATE downloads
SET downcount=$countup
WHERE downid=$referid";
$rUpdate = mysql_query($qUpdate);
?>
答案 0 :(得分:0)
一些相对较小的修改应该可以解决问题。首先,将onclick更改为以下内容:
onclick=\"Counter('$referid', this); return false;\"
我们所做的是将 this 作为第二个参数发送到Counter函数,以便我们引用所点击的链接。其次,我们添加了 return false ,这会阻止浏览器导航到href中指定的网址。
修改后的计数器功能如下所示:
function Counter(id, link) {
$.get("clickcounter.php?id=" + id, function() {
location.href = $(link).attr("href");
});
}
我们现在有一个对点击链接的引用。现在已将函数指定为$ .get()的第二个参数。这是成功函数,在成功调用ajax调用时调用。在该函数内部,我们现在重定向到单击链接上的href属性中指定的url。
我觉得我应该指出,推荐的方法是使用与html分开的jQuery来绑定onclick。 referid可以存储在data属性中(我选择调用data-rid):
<a href='downloads/".$downfile."' class='dl' data-rid='$referid'>Download File</a>
然后绑定所有下载链接的onclick(带有“dl”类的元素):
$(function() {
$("a.dl").click(function() {
var id = $(this).attr("data-rid");
var href = $(this).attr("href");
$.get("clickcounter.php?id=" + id, function() {
location.href = href;
});
return false;
});
});
(我觉得我应该指出代码还没有经过测试,因此有可能在某个地方发生了错误信息)