6

我有一个点击跟踪 AJAX 函数(WebMethod.aspx页面上调用 a),当用户点击链接时我需要调用它。

不幸的是,我正在使用window.location = "newUrl"更改页面,这似乎使 AJAX 调用失败。有没有解决的办法?

我不需要从 AJAX 调用中获取任何信息,我只需要确保WebMethod调用了它。

我知道我可以只重定向success()orfailure()调用,但随后我将不得不等待该clickTracking()方法运行,这需要 ~ 1s。这是项目规范中的协议不可接受的,因此不是一个可行的解决方案。

4

3 回答 3

3

您为什么不直接将用户发送到记录点击的 ASPX 页面,然后发送location标头以重定向到新的 url,而不是使用 AJAX?例如,在链接点击时,会发生以下情况:

window.location = "/redirect.aspx?track=true&url=" + encodeURIComponent(newUrl);

redirect.aspx然后将处理跟踪和重定向到新 URL。这几乎是您在发送用户之前无需等待 AJAX 请求完成的唯一方法。

另请参阅:将用户重定向到另一个页面 (MSDN)

可能值得注意的是,您每天都会在许多网站上看到这种方法。最常见的是,它们出现在广告中。AdSense 广告链接如下所示:

http://www.google.com/aclk
    ?sa=L&ai=C6DnFKnl1S5zhKoSBjAeqyKzKBPOD_2ehlIXfD9WsvQsQAVDQzK______
    8BYLvOuYPQCsgBAaoEGU_Q8k4OJin9jMDXAD6KQ_2Dsv7xyokLxRY
    &num=1&ggladgrp=13269254452699041863&gglcreat=8511532373602616220
    &sig=AGiWqtwzFm2sTimBuQpkD5kazyRNkkqH3w
    &q=http://www.amazon.co.uk/s/%3Fie%3DUTF8%26keywords%3Dhello%2Bworld

是的,无论如何(我把它撞倒了一点)。当您点击它时,您会登陆http://www.google.com/aclk,它会在跟踪点击后将您重定向到最终站点。

于 2010-02-12T15:42:26.643 回答
2

我只需要确保调用了 WebMethod。

如果以上内容真的很重要,您可以执行以下操作:

function onLinkClicked() {
    $.ajax({
        url: 'WebMethod.aspx',
        success: function(data) {
            window.location = "newUrl";
        }
    });
}

页面重定向时会有一些延迟。这可能会也可能不会接受,具体取决于您的应用程序以及从用户到主机的平均延迟。


编辑:

除了下面的新评论,不幸的是,window.location更改将中断您的 AJAX 请求。

对于内部链接:您可能希望在用户登陆新页面时立即跟踪您的链接,而不是在他们单击超链接时。

对于外部链接:我会使用服务器端重定向方法,正如Andy E 在另一个答案中所建议的那样

于 2010-02-12T15:39:31.557 回答
0

使用<iframe>包装器来包装您的页面。然后,当您有 AJAX 请求时,将请求传递给包装器并在<iframe>. 这样做将使您能够拥有完美的异步请求,同时仍保持应用程序的响应能力。

当然,您也没有更改地址栏并有效地扼杀了您的 SEO,但这是一个糟糕的架构的权衡。您的点击跟踪功能大约需要一秒钟的事实简直令人震惊。也许您应该在服务器上的异步线程上启动它,然后使用单独的线程 ( System.Threading) 将数据提供给客户端。这将减轻您遇到的问题。

否则,您可以使用异步可靠“不一起破解”。随便选两个。

编辑

我的错,您还可以将 AJAX 请求作为弹出窗口运行:

window.open(url,'ajax','height=0,width=0');

这仍然不是一个好主意,但它会起作用。

于 2010-02-12T16:14:39.413 回答