.post()在jquery .click()方法中工作但未完成

时间:2012-05-12 08:52:53

标签: jquery post tracking

大家好我编写代码来跟踪用户点击链接并将其记录在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已被重新审核但尚未完成。因此无法保存数据。看起来页面移动太快了

如何解决这个问题。非常感谢

3 个答案:

答案 0 :(得分: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。如果它是1它是左按钮,你需要e.preventDefault()并在AJAX请求完成后重定向。如果它是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;
        }
    });
});

答案 1 :(得分: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');
  });
});

答案 2 :(得分:0)

试试这个:

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

        $.ajaxSetup.async = false;

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

        return shouldFollowAnchor;
    });
});

跳转到页面的原因是,当您单击链接时,数据已发布并导航到锚元素的href属性中的链接。 您通过返回false停止关注该链接。 这个例子脚本等待来自服务器的响应 - 是的,你可以添加一些验证,如果你喜欢 - 同时你可以显示一些“loading ...”或发送“发送...”消息,用户想知道发生了什么。 =)