首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.post()正在工作,但在jquery .click()方法中未完成

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

Stack Overflow用户
提问于 2012-05-12 16:52:53
回答 3查看 160关注 0票数 0

大家好,我写了跟踪用户点击链接的代码,并将它们记录在php页面上。这是我的代码

代码语言:javascript
运行
复制
<!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已被请求但未完成。所以数据不能保存。似乎页面移动得太快了

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-12 16:58:47

离开可能会在AJAX请求完全发送之前中止它。要避免这种情况,请不要在请求完成之前加载目标页面:

代码语言:javascript
运行
复制
$('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请求,不做其他任何事情--页面无论如何都会在一个新的选项卡中打开。

代码语言:javascript
运行
复制
$('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
EN

Stack Overflow用户

发布于 2012-05-12 16:54:30

代码语言:javascript
运行
复制
$('a').click(function() {
    $.post("get.php", { name: "John" }, 
                                      ^ why this comma     
    });

你应该这样做:

代码语言:javascript
运行
复制
$('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');
  });
});
票数 0
EN

Stack Overflow用户

发布于 2012-05-12 17:10:55

试试这个:

代码语言:javascript
运行
复制
$(function() {
    $('a').click(function() {
        var shouldFollowAnchor = false;

        $.ajaxSetup.async = false;

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

        return shouldFollowAnchor;
    });
});

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10562284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档