大家好,我写了跟踪用户点击链接的代码,并将它们记录在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已被请求但未完成。所以数据不能保存。似乎页面移动得太快了
如何解决这个问题。非常感谢
发布于 2012-05-12 16:58:47
离开可能会在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,那么它就是左边的按钮,您需要在AJAX请求完成后执行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-12 16:54:30
$('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-12 17:10:55
试试这个:
$(function() {
$('a').click(function() {
var shouldFollowAnchor = false;
$.ajaxSetup.async = false;
$.post("get.php", { name: "John" }, function () {
shouldFollowAnchor = true;
});
return shouldFollowAnchor;
});
});跳转到页面的原因是,当您单击链接时,数据将被发布,您将导航到锚元素的href属性中的链接。您可以通过返回false来停止跟踪该链接。此示例脚本等待来自服务器的响应-是的,如果您喜欢-,可以添加一些验证,同时您可以显示一些“正在加载...”。或者发送“发送...”消息,用户会想知道发生了什么。=)
https://stackoverflow.com/questions/10562284
复制相似问题