首先建立连接,重定向用户秒

时间:2013-04-25 18:56:20

标签: java javascript ajax java-ee

我有一个想法让一些非常甜蜜的东西,但我不确定它是否可能。这是一个非常基本的ajax函数示例,我可以用它来建立服务器的连接......

function getFakePage(userId)
{
    var ajaxObject, path, params;

    ajaxObject = getAjaxObject();
    params = "?userId=" + userId
    path = getInternalPath() + "someServlet" + params;

    ajaxObject.open("GET", path, true);
    ajaxObject.send();

    // On ready state change stuff here
}

所以我想说我有这样的网址......

https://localhost:8443/Instride/user/1/admin

我想使用javascript将用户重定向到此URL。通常我会这样做......

window.location = "https://localhost:8443/Instride/user/1/admin";

但我的想法是创建一个javascript (没有js框架)函数,它可以将ajax代码与window.location代码结合起来。基本上我想要完成的是通过ajax与服务器建立连接,在该服务器上发送一个servlet,我希望用户被重定向到该URL,然后将用户重定向到该URL。因此,无论用户多长时间连接到我的服务器,无论他们身在何处,都会看到加载图标而不是空白页。

所以要明确我想要完成的事情;我不想把window.location放在我的ajax函数的成功之内(因为那将包含两次往返),我不想为请求的资源返回大量的HTML并将其添加到页面中。我想用ajax建立与服务器的连接,向用户想要去的URL发送一个servlet,然后以某种方式覆盖ajax函数来重定向该用户。这可能吗?

而且我知道你们中的一些人可能会觉得这很愚蠢,但是当你谈到海外用户盯着白页的拨号连接速度慢时,就不会这样了。如果有可能,我很乐意听到一些见解。非常感谢你!

2 个答案:

答案 0 :(得分:0)

您无法在一个中执行AJAX请求和位置更改。如果您只想做一个请求,则必须选择其中一种方法。即。返回一些数据并替换当前页面上的内容,或者加载一个全新的页面。

想要两者兼顾没有任何意义。您可能想要的是有状态网址;您的URL与显示的内容匹配的位置,即使该内容来自AJAX请求。在这种情况下,一个简单的解决方案是使用URL的#部分,您可以自由更改(window.location.hash)。一些现代浏览器支持更改整个URL而不会导致页面重新加载。我自己使用#取得了巨大的成功。

答案 1 :(得分:0)

首先,我要说最好的解决办法是找出导致缓慢和修复的原因。

现在关于你的问题,是的,你可以做到。你甚至可以把它变成现有的应用程序。但它不会很漂亮。它伴随着它自己的一系列问题。但是以下是步骤:

  1. 浏览器调用请求“somepage.html”
  2. 的ajax缓存服务
  3. 浏览器加载加载图标
  4. 服务器创建somepage.html并将其缓存在临时缓存中(ehcache或其他库可能很好,可能根据大小为缓存提供文件支持)
  5. 服务器响应带有缓存页面ID的ajax请求
  6. 浏览器现在重定向到“somepage.html?cacheId = {cacheId}”,其中id来自ajax调用。
  7. 服务器使用过滤器查看是否可以为页面而不是实际页面提供任何缓存,从而加快请求速度。
  8. 话虽如此,最好只使用加载图标快速加载新页面,同时通过ajax完成任何繁重的任务。