我正在跟踪JQuery中的链接。
$(".hdr a[id]").mousedown(function(e){
var h = this;
var url = "/g/click/" + this.id;
$.get(url);
});
有时浏览器会打败ajax调用。在点击跟踪器被触发之前加载新页面。 (这不是缓慢的响应时间;请求甚至没有达到apache)。这是间歇性的,不易重现,但在用户在网站上做了很多事后,它往往会出现。
我在之前的迭代中使用了preventDefault,但最终破坏了cmd-click并且没有跟踪右键单击。
有没有办法确保它会运行?
感谢您的帮助。
答案 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请求。