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');
它仍然不是一个好主意,但它会起作用。