我有一个点击跟踪AJAX功能(在WebMethod
页面上调用.aspx
),我需要在用户点击链接时调用它。
不幸的是,我正在使用window.location = "newUrl"
来更改页面,这似乎使AJAX调用失败。有办法解决这个问题吗?
我不需要从AJAX调用中获取任何信息,我只需要确保调用WebMethod
。
我知道我可以重定向success()
或failure()
次调用,但之后我必须等待clickTracking()
方法运行,这需要〜{{ 1}}。这是项目规范中的协议所不能接受的,因此不是一个可行的解决方案。
答案 0 :(得分:3)
为什么不将用户发送到记录点击的ASPX页面,然后发送location
标题重定向到新网址,而不是使用AJAX?例如,在链接点击时,将发生以下情况:
window.location = "/redirect.aspx?track=true&url=" + encodeURIComponent(newUrl);
然后 redirect.aspx
将处理跟踪和重定向到新网址。在发送用户之前,这几乎是您无需等待AJAX请求即可完成的唯一方法。
另请参阅:Redirecting Users to Another Page (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登陆,在跟踪点击后会将您重定向到最终网站。
答案 1 :(得分:2)
我只需要确保WebMethod 被称为。
如果上述内容非常重要,您可以执行以下操作:
function onLinkClicked() {
$.ajax({
url: 'WebMethod.aspx',
success: function(data) {
window.location = "newUrl";
}
});
}
页面重定向时会有一些延迟。这可能是也可能是不可接受的,具体取决于您的应用程序以及用户与主机之间的平均延迟。
修改强>
继续下面的新评论,遗憾的是window.location
更改将中断您的AJAX请求。
对于内部链接:您可能希望在用户登陆新页面时立即跟踪您的链接,而不是在他们点击超链接时。
对于外部链接:我会使用服务器端重定向方法,Andy E suggested in another answer。
答案 2 :(得分:0)
使用<iframe>
包装器来包装您的页面。然后,当您有AJAX请求时,将请求传递给包装器并在<iframe>
上导航。这样做可以让您在保持应用响应的同时获得完全异步的请求。
当然,你也没有改变地址栏并有效地杀死你的搜索引擎优化,但这是一个糟糕的架构的权衡。您的点击跟踪功能大约需要一秒的事实简直令人震惊。也许您应该在服务器上的异步线程上启动它,并使用单独的线程(System.Threading
)将数据提供给客户端。这样可以减轻您遇到的问题。
否则,您可以异步,可靠或“未被黑客攻击”。挑选任何两个。
修改强>
我的不好,你也可以弹出一个AJAX请求:
window.open(url,'ajax','height=0,width=0');
这仍然不是一个好主意,但它会起作用。