进行ajax调用导航离开页面

时间:2014-08-15 08:00:00

标签: javascript jquery ajax node.js

我正在开发一个与其他网站有多个链接的网站。我想要的是发送一个ajax调用来报告当用户点击并离开页面时用户正在离开。我点击链接时发出警报,但是由于某种原因控制器永远不会得到ping。

如何实现它将获得任何帮助。

6 个答案:

答案 0 :(得分:2)

无法完成。

当你去导航时,只有一个事件可以捕捉到onbeforeunload事件,而且它的功能非常有限。

更不用说还有其他方法可以离开页面而不会离开:

  • 丢失网络连接
  • 关闭浏览器。
  • 失去力量。

你唯一能做的就是设置一个heartbeat类的东西,每隔几毫秒就会对服务器进行ping操作,然后说“我活着”。

根据您的目的,通常会有更好的选择。

答案 1 :(得分:1)

您可以尝试简单地设置click事件处理程序,它将在导航之前检查每个链接的href属性。如果它转到另一个网站,处理程序发送AJAX请求,然后(在服务器响应之后)重定向到页面。

var redirect = '';
$('a').click(function() {
    if (this.href.host != document.location.host) {
        if (redirect) return false; // means redirect is about to start, clicking other links has no effect
        redirect = this.href;
        $.ajax({
            url: '/away', 
            success: function(){document.location.href = redirect;}
        });
    return false;
});

但是,如果用户在多个标签页中打开了您的页面,它就无法正常工作。

答案 2 :(得分:0)

您可以尝试:

$(window).on('beforeunload', function(){
    return "This should create a pop-up";
});

答案 3 :(得分:0)

您可以通过捕获页面上所有链接(或所有相关链接)上的点击来实现它,然后在其上调用ev.preventDefault()以防止浏览器直接导航到该页面。

相反,您可以对服务器进行AJAX调用,当该调用返回时,您可以将window.location设置为用户尝试导航到的URL。

答案 4 :(得分:0)

这是您可以尝试的解决方法。

在加载页面时,使用jquery将所有href属性移动到tempHref属性。然后,附加一个方法来捕获click事件。

这样,点击链接就不会自动移动到预定目的地。 单击发生时,只需执行ajax调用,然后使用javascript,移动到另一页。

$('a').each(function () {
    var link = $(this);
    link.attr('tempHref', link.attr('href'));
    link.removeAttr('href');
});

$(document).on('click', 'a', function ()
{
    //perform ajax call;
    location.href = $(location).attr('tempHref');
});

答案 5 :(得分:0)

目前唯一可靠的方法是挂钩(即添加事件侦听器)您的代码在 {{1} 上的 sendBeacon 中使用所谓的 Beacon API 方法} 事件(即当用户尝试离开页面时)。

beforeunload 方法通过 HTTP 向网络服务器异步发送少量数据。它旨在用于将分析数据发送到网络服务器,并避免了用于发送分析的传统技术的一些问题,例如使用 navigator.sendBeacon()

XMLHttpRequest