【问题标题】:JQuery click function not firing intermittentlyjQuery单击功能不会间歇性触发
【发布时间】:2009-07-20 15:13:17
【问题描述】:

哇,这个把我的头发扯掉了。

我在 JQuery 中跟踪链接。

$(".hdr a[id]").mousedown(function(e){
    var h = this;
    var url = "/g/click/" + this.id;
    $.get(url);
  });

似乎有时浏览器会击败 ajax 调用。在触发点击跟踪广告之前加载新页面。 (这不是响应时间慢;请求甚至没有命中 apache)。这是间歇性的,不容易重现,但它往往会在用户在网站上做了很多事情之后出现。

我在早期的迭代中使用了 preventDefault,但最终会破坏 cmd-click 并且不跟踪右键单击。

有没有办法确保它会运行?

感谢您的所有帮助。

【问题讨论】:

  • Jason,请注意使用同步 xhr 调用的影响

标签: jquery ajax


【解决方案1】:

听起来和我问时遇到的问题相同:$.post() doesn't have time to run? 我的解决方案是将以下内容添加到组合中:

$.ajaxSetup({async: false});

不再执行异步请求意味着我的项目将在其他项目开始之前完成。

【讨论】:

  • 我最终这样做了,它似乎已经解决了这个问题。谢谢!
【解决方案2】:

如果您使用的是获取请求,则响应将被缓存。为了缓解缓存问题,您需要确保 url 是唯一的。您可以通过每次将唯一的虚拟查询字符串项附加到 url 或更好地使用 .ajax 方法并指定 cache:false 来做到这一点。

我不会使用 asynch:false,因为这会锁定 ui,如果响应无法返回或延迟,用户最终必须崩溃并且无法解决缓存问题。

$(".hdr a[id]").mousedown(function(e){
    var url = "/g/click/" + this.id;
    $.ajax({
         url: url,
         cache: false,
         success: function(data){
                 //do something with the response
                 }
         });
});

注意 我也可能很想在您的脚本中调用 setTimeout。如果另一个 mousedown 事件快速连续发生,这将允许您清除超时。 如果用户反复按下鼠标,这将防止发送大量 xhr 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多