0

こんにちは、ユーザーのリンクのクリックを追跡するためのコードを作成し、それらを php ページに記録します。これは私のコードです

<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Tracking outgoing links with JavaScript and PHP</title>
 </head>
 <body>
  <p><a href="test2.html">Test link to Google</a></p>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script>
   $(function() {
    $('a').click(function() {
    $.post("get.php", { name: "John" }      
    });
   });
  </script>
 </body>
</html>

動作しています。ページ get.php は要求されていますが、完了していません。そのため、データを保存できません。ページの移動が速すぎるようです

この問題を解決する方法。本当にありがとう

4

3 に答える 3

1

別の場所に移動すると、AJAX 要求が完全に送信される前に中止される可能性があります。これを回避するには、リクエストが完了する前にターゲット ページを読み込まないようにします。

$('a').click(function(e) {
    e.preventDefault();
    var url = $(this).attr('href');
    $.post("get.php", { name: "John" }, function() {
        location.href = url;
    });
});

ただし、リンクを中クリックしても、このイベントはトリガーされません。常にイベントを発生させたい場合は、イベントを使用してmousedownをチェックしてくださいe.which。それが左ボタンだった場合は、AJAX リクエストが終了した後にリダイレクト1する必要があります。e.preventDefault()それ2が中央のボタンであり、AJAX リクエストを送信するだけで他に何もする必要がない場合、ページはとにかく新しいタブで開きます。

$('a').on('click mousedown', function(e) {
    if(e.which == '3') {
        return; /* do not handle rightclick */
    }
    else if(e.type == 'click' || e.which == '1') {
        e.preventDefault();
    }
    var url = $(this).attr('href');
    $.post("get.php", { name: "John" }, function() {
        if(e.type == 'click' || e.which == '1') {
            location.href = url;
        }
    });
});
于 2012-05-12T08:58:47.007 に答える
0

これを試して:

$(function() {
    $('a').click(function() {
        var shouldFollowAnchor = false;

        $.ajaxSetup.async = false;

        $.post("get.php", { name: "John" }, function () {
            shouldFollowAnchor = true;
        });

        return shouldFollowAnchor;
    });
});

ページにジャンプする理由は、リンクをクリックするとデータが投稿され、アンカー要素のhref属性のリンクに移動するためです。falseを返すことにより、そのリンクをたどるのをやめます。この例では、スクリプトはサーバーからの応答を待機します-はい、必要に応じて検証を追加できます-その間、「読み込み中...」または「送信中...」メッセージを表示できます。ユーザーは知りたがります何が起こっていますか。=)

于 2012-05-12T09:10:54.780 に答える
0
$('a').click(function() {
    $.post("get.php", { name: "John" }, 
                                      ^ why this comma     
    });

次のようにする必要があります。

$('a').on('click', function(event) {
  var self = $(this);
  event.preventDefault(); // stop the navigation of `a`
  $.post("get.php", { name: "John" },function() {
        location.href = self.attr('href');
  });
});
于 2012-05-12T08:54:30.410 に答える