1

任何人都可以帮助我,我正在尝试为我的网站创建一个下载计数器。我有一个 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);

?>
4

1 回答 1

0

一些相对较小的修改应该可以解决问题。首先,将 onclick 更改为以下内容:

onclick=\"Counter('$referid', this); return false;\"

我们所做的是将this作为第二个参数发送给 Counter 函数,这样我们就有了对点击链接的引用。其次,我们添加了return false,它会阻止浏览器导航到 href 中指定的 url。

修改后的计数器函数如下所示:

function Counter(id, link) {
   $.get("clickcounter.php?id=" + id, function() {
      location.href = $(link).attr("href");
   });
}

我们现在有了对点击链接的引用。现在已将一个函数指定为 $.get() 的第二个参数。这是成功函数,在成功调用 ajax 调用时调用。在该函数中,我们现在重定向到单击链接的 href 属性中指定的 url。

我觉得我应该指出,推荐的方法是使用与 html 分开的 jQuery 绑定 onclick。referid 可以存储在数据属性中(我选择将其称为 data-rid):

<a href='downloads/".$downfile."' class='dl' data-rid='$referid'>Download File</a>

然后为所有下载链接(具有“dl”类的元素)绑定 onclick:

$(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;
    });
});​

(我觉得我应该指出该代码尚未经过测试,因此有可能是某个地方出现了拼写错误)

于 2012-10-10T17:56:31.117 回答