大家好我编写代码来跟踪用户点击链接并将其记录在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已被重新审核但尚未完成。因此无法保存数据。看起来页面移动太快了
如何解决这个问题。非常感谢
答案 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 ...”或发送“发送...”消息,用户想知道发生了什么。 =)