1

私のウェブサイトにダウンロードカウンターを作成しようとしています。ユーザーがダウンロード リンクをクリックすると 1 カウントアップする ajax スクリプトがあります。一部のブラウザでは、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;\"

これをCounter 関数の 2 番目の引数として送信し、クリックされたリンクへの参照を取得しました。次に、ブラウザが href で指定された URL に移動するのをブロックするreturn falseを追加しました。

変更されたカウンター関数は次のようになります。

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

これで、クリックされたリンクへの参照ができました。$.get() の 2 番目の引数として関数が指定されました。これは成功関数で、ajax 呼び出しが正常に呼び出されたときに呼び出されます。その関数内で、クリックされたリンクの href 属性で指定された URL にリダイレクトします。

推奨される方法は、html とは別に jQuery を使用して onclick をバインドすることです。参照 ID は、データ属性 (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 に答える