2012-10-10 46 views
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); 

?> 
+0

PHP的上面可以通过改变被简化了不少'SET向下计数= $计数进'设置为减计数=减计数+ 1'。这样你完全避免了SELECT。 – Strille

回答

0

几个相对较小的修改应该可以解决问题。首先,的onclick更改为以下:

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

我们所做的是在这个形式发送的第二个参数计数器功能,所以我们要点击的链接的引用。其次,我们添加了返回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可以存储在数据属性(我选择调用数据-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; 
    }); 
});​ 

(我觉得我应该指出的是,该代码没有经过测试,所以它可能是一个错字的地方已经悄悄)