0

我有一个想法要做一些很甜的东西,但我不确定是否可行。这是一个非常基本的 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 创建与服务器的连接,在该服务器上发送一个 servlet 我希望用户重定向到的 url,然后将用户重定向到该 URL。因此,无论用户在世界上的任何地方连接到我的服务器需要多长时间,他们都会看到加载图标而不是空白白页。ajaxwindow.location

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

我知道你们中的一些人可能会认为这很愚蠢,但当您谈论的是海外用户的拨号连接缓慢而盯着白页时,情况并非如此。如果可能的话,我很想听听一些见解。非常感谢你!

4

2 回答 2

0

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

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

于 2013-04-25T19:05:22.977 回答
0

首先,让我说最好的解决方案是找到导致缓慢的原因并修复它。

现在关于你的问题,是的,你可以做到。您甚至可以将其硬塞到现有的应用程序中。但这不会很漂亮。它伴随着它自己的一系列问题。但这里是步骤:

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

话虽如此,最好使用加载图标快速加载新页面,同时通过 ajax 完成任何繁重的工作。

于 2013-04-25T19:22:47.047 回答