点击<a> tag</a>时的活动顺序

时间:2011-12-06 23:53:51

标签: javascript jquery

所以我的网站上有一个普通的链接,我想为它添加跟踪。我可以设想一些方法来做到这一点,但我已经通过编写一个小的jquery函数并在我的标签中删除一个小片段来解决这个问题:

<a href="newpage.html" onclick="saveClick(paramofpageclickhere);">click me!</a>

的javascript:

function saveClick(someparamhere){
  $.ajax({
   url: "somepage.php",
   data: {param:someparamhere}
  });
}

现在,我知道我的语法可能不好,我只是在询问整体概念。当您单击该链接时,我希望javascript发出对saveClick的调用,这会立即进行ajax调用。没有成功的处理程序,因为我真的不关心是否或返回什么。我只需要somepage.php记录事件。然后,在所有这些之后,我希望标签转到它的href。

是这样的吗?在文档进入另一页之前是否会发出ajax调用?这会在所有情况下都有效吗?

有没有人做过这样的事情?任何经验都会受到赞赏....

2 个答案:

答案 0 :(得分:3)

如果你想确保AJAX通话可以通过:

<a href="newpage.html" data-parameters="paramofpageclickhere">click me!</a>

$('[data-parameters]').bind('click', function (event) {
    //cache this element to use in AJAX function
    var $this = $(this);

    //prevent the default naviation
    event.preventDefault();

    $.ajax({
       url: "somepage.php",
       data: {param:$this.attr('data-parameters')}
       success : function () {

           //now navigate to the requested page
           location = $this[0].href;
       }
    });
});

<强>更新

$.ajax()公开timeout函数:

  

<强> timeoutNumber

     

设置请求的超时(以毫秒为单位)。这将覆盖   使用$ .ajaxSetup()设置的任何全局超时。超时时间开始   在$ .ajax调用的点上;如果有其他几个请求   进度和浏览器没有可用的连接,这是可能的   请求在发送之前超时。在jQuery 1.4.x和   如下所示,XMLHttpRequest对象将处于无效状态   请求超时;访问任何对象成员可能会抛出一个   例外。仅在Firefox 3.0+中,脚本和JSONP请求不能   超时取消;即使脚本到达,脚本也会运行   超时期限。

因此,您可以设置模仿timeout函数的errorsuccess函数。文档确实说明了:it is possible for a request to time out before it can be sent但如果您的timeout是一个非常小(可能为零)的延迟,那么它可以减少用户点击链接和浏览器加载新页面之间的延迟。

答案 1 :(得分:0)

我根本不会这样做......它可能会导致你的onclick事件没有被解雇。 我认为最好在执行ajax调用的click上调用javascript函数,然后将用户带到目标页面。

你可以这样做,例如,这样:

<a href="javascript:myfunc(paramofpageclickhere)">...</a>

你的javascript函数,应该是这样的:

myfunc(paramofpageclickhere) {
  //do ajax call
  saveClick(someparamhere);
  //go to target page
  location.href = "target.htm";
}