JQuery单击函数不会间歇性地触发

时间:2009-07-20 15:13:17

标签: jquery ajax

哇,这个让我撕开我的头发。

我正在跟踪JQuery中的链接。

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

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

我在之前的迭代中使用了preventDefault,但最终破坏了cmd-click并且没有跟踪右键单击。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

$.ajaxSetup({async: false});

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

答案 1 :(得分:1)

如果您使用的是get请求,则会缓存响应。要缓解缓存问题,您需要确保该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
                 }
         });
});

N.B 我也可能想把一个setTimeout调用放到你的脚本中。如果另一个mousedown事件快速连续出现,这将允许您清除超时。 这将防止在用户重复出现时发送大量xhr请求。