window.location更改失败AJAX调用

我有一个点击跟踪AJAXfunction(在.aspx页面上调用WebMethod ),我需要在用户点击链接时调用它。

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

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

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

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

 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 ,在跟踪点击后会将您重定向到最终网站。

我只需要确保调用WebMethod。

如果上述内容非常重要,您可以执行以下操作:

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

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


编辑:

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

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

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

使用包装器来包装页面。 然后,当您有AJAX请求时,将请求传递给包装器并在上导航。 这样做可以让您在保持应用响应的同时获得完全异步的请求。

当然,你也没有改变地址栏并有效地杀死你的搜索引擎优化,但这是一个糟糕的架构的权衡。 您的点击跟踪function大约需要一秒的事实简直令人震惊。 也许您应该在服务器上的异步线程上启动它,并使用单独的线程( System.Threading )将数据提供给客户端。 这样可以减轻您遇到的问题。

否则,您可以拥有异步可靠“未被黑客攻击” 。 挑选任何两个。

编辑

我的不好,你也可以弹出一个AJAX请求:

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

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