当点击链接时,javascript会触发并忘记 - 异步ajax

时间:2014-11-17 22:24:08

标签: javascript jquery ajax asp.net-mvc

我们正在我们的数据库中存储事件。事件可以是页面命中和保存/更新等。从控制器操作内部,这发生得非常漂亮。

我有3个链接,当点击这些链接时,我想在db中存储一个事件。而不是让用户进行通用操作来存储事件然后执行response.redirect,我想通过幕后的jquery / ajax来做这件事。现在,当用户点击链接时,应该发生两件事

  1. ajax请求将创建一个事件
  2. 用户转到目标网页。
  3. 我只想让用户点击链接,用户就可以到达目标页面了。 幕后处理不应该让用户在页面上再停留一两秒,而代码正在等待远程操作的响应。我是否需要等待ajax请求完成或者只是放置"返回true"在我的jquery行动?由于用户将被带到下一页,我的ajax请求会变坏还是停止?在firebug中,我看到ajax进程在用户在ajax请求完成之前单击页面上的某个链接时中止。我最好能做到这样的事情吗?

    示例代码:

    $(document).ready(function() {
                $("a[custom-event]").on('click', function () {
                    var label = $(this).attr("custom-event");
                    var value = $(this).attr("custom-event-value"); 
    
            DoSomeAjaxProcessing('event', 'click', label, value); //don't want this to go bad if redirection happens immediately
    
                    return true; //return true so that the browser can send the user to the href location
                });
            });
    

    更新1:

    这样的事情会为我而飞。我也要测试和更新。

    $(document).ready(function() {
                    $("a[custom-event]").on('click', function () {
                        var label = $(this).attr("custom-event");
                        var value = $(this).attr("custom-event-value"); 
    
                (new Image).src = someurl+"?label="+label+"&value="+value+"&type=event&action=click";
    
                        return true; //return true so that the browser can send the user to the href location
                    });
                });
    

1 个答案:

答案 0 :(得分:1)

如果您尝试使用服务器录制活动,则必须承担一定的费用。您不能异步调用服务器来记录事件,也可以同时为该链接提供目标。

如你所说,你提出的两条路径并不令人满意:

  1. 对事件记录路由进行AJAX调用同步,并在记录完成后仅将用户带到目标。这会导致将用户带到目的地的延迟。
  2. 提供将用户重定向到正确路由并记录正确事件的通用路由。这可能会破坏网址方案,并通过一条路线汇集大量流量。
  3. 在Stack,我们还使用" events"跟踪用户操作,但我们可以在目的地的控制器级别上进行跟踪。

    例如,如果您有一个结帐流程,将用户从/home路由转到/login路由,我们会在为{{1}提供服务的控制器的开头跟踪该事件查看。

    /login