当用户点击指向另一个页面的链接时,我想执行一个简单的AJAX get请求。 AJAX调用是完成还是会停止,因为用户离开了发起AJAX请求的页面?我并不关心get请求的响应。
任何想法或想法?
答案 0 :(得分:12)
如果您只想将数据发送到服务器而不关心共鸣,则可能需要尝试 beacon 请求。这基本上是一个火灾和忘记的事情,就像这样:
function sendInfo(something) {
var beacon = new Image();
beacon.src = '/somepath/script.pl?info=' + something;
}
$('a[href^=http]').bind('click', function(e) {
sendInfo(escape(e.href));
});
嗯,这种技术不会阻止所以它可能是一个竞争条件,无论浏览器是否会触发请求(我没有为此目的测试它)。为了确保请求将被触发,请调用这样的ajax调用:
$('a[href^=http]').bind('click', function(e) {
$.get('/somepath/script.pl', {info: escape(e.href)}, function(data) {
location.href = e.href;
});
return false;
});
答案 1 :(得分:3)
我知道很久以前这个问题已被提出,回答和接受了......但我最近问自己同样的问题,找到了jAndy的回答,并略微改进了(关于Chrome兼容性问题)和思想我会发布我的发现。
Andy的灯塔答案很简单,但正如SirDarius所提到的,Chrome似乎已经过优化以忽略它。
我修改了jAndy的代码如下:
function sendInfo(something) {
var beacon = new Image();
beacon.src = '/somepath/script.pl?info=' + something;
}
$('a[href^=http]').bind('click', function(e) {
sendInfo(escape(e.href));
setTimeout(function() {window.location.href=e.href;},0); // change window location on timeout
return false; // cancel current window location change
});
这似乎摆脱了这个问题。
谢谢安迪!