window.location更改失败AJAX调用

时间:2010-02-12 15:34:40

标签: asp.net javascript jquery ajax pagemethods

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

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

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

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

3 个答案:

答案 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');

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