AJAX在离开页面之前立即调用

时间:2011-02-07 16:05:34

标签: jquery ajax load get xmlhttprequest

当用户点击指向另一个页面的链接时,我想执行一个简单的AJAX get请求。 AJAX调用是完成还是会停止,因为用户离开了发起AJAX请求的页面?我并不关心get请求的响应。

任何想法或想法?

2 个答案:

答案 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
});

这似乎摆脱了这个问题。

谢谢安迪!