2013-04-25 28 views
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代碼與window.location代碼相結合。基本上我想完成的是通過ajax創建與服務器的連接,在該服務器上發送servlet,我希望用戶重定向到的url,然後將用戶重定向到該URL。因此,無論用戶在世界任何地方連接到我的服務器,無論多長時間,都會看到一個加載圖標,而不是空白頁。

因此,要明確我正在努力完成什麼;我不希望將window.location放在我的ajax函數的成功範圍內(因爲這將包含兩次往返),並且我不想爲請求的資源返回一大塊HTML並將其添加到頁面中。我想通過ajax建立與服務器的連接,向servlet發送用戶想要訪問的URL,然後以某種方式覆蓋ajax函數以重定向該用戶。這可能嗎?

我知道你們中的一些人可能會認爲這很愚蠢,但是當你談論海外用戶時,撥號連接緩慢,盯着白頁。如果可能的話,我很樂意聽到一些見解。非常感謝你!

+0

您究竟因爲這個AJAX調用而期望有什麼不同,而不是重定向到頁面?這僅僅是進步事件嗎?你看過HTML 5應用程序緩存嗎?它將允許您在後臺下載頁面,緩存它們,並立即切換到它們。但它需要一個漂亮的現代瀏覽器。 – svachalek 2013-04-25 19:25:29

回答

0

首先,讓我說最好的解決方案是找出是什麼導致了緩慢並修復它。

現在至於你的問題,是的,你可以做到。你甚至可以把它放到現有的應用程序上。但它不會很漂亮。它帶有它自己的問題。但這裏的步驟:

  1. 瀏覽器調用AJAX緩存服務請求 「somepage.html」
  2. 瀏覽器加載加載圖標
  3. Server創建SomePage的。HTML和臨時緩存緩存它(的Ehcache或其他圖書館將是很好的,很可能與視大小而定高速緩存文件後備)
  4. 服務器響應ID Ajax請求的緩存頁面
  5. 現在瀏覽器重定向到「 somepage.html?cacheId = {cacheId}「其中的id來自ajax調用。
  6. 服務器使用過濾器查看是否可以爲頁面提供任何緩存而不是實際頁面,從而加快請求速度。

話雖如此,最好是通過加載圖標快速加載新頁面,而通過ajax完成任何繁重的工作。

+0

謝謝你的步驟。我其實不喜歡你以後的建議。這將導致更多的http請求,這是我不想要的。我寧願只做一次往返。但你的腳步搖滾,我欣賞知識。 – gmustudent 2013-04-25 19:31:52

+0

無論採取哪種方式,您至少需要兩次往返,一次用於ajax(加載內容或告訴服務器緩存),另一次用於頁面。另外,如果往返是一個問題,你可以通過base64將圖像編碼成css和內聯css和javascript來節省很多往返行程。我不會建議它,但是這確實降低了往返程度。 – 2013-04-25 19:41:22

0

您不能在一箇中執行AJAX請求和位置更改。如果你只想做一個請求,你必須選擇其中一種方法。即。返回一些數據並替換當前頁面上的內容,或者加載一個全新的頁面。

想要做到兩者都沒有任何意義。你可能想要的是有狀態網址;即使該內容來自AJAX請求,您的網址與顯示的內容相匹配。在這種情況下,一個簡單的解決方案是使用URL的#部分,您可以自由更改(window.location.hash)。一些現代瀏覽器支持更改整個URL而不會導致頁面重新加載。我已經使用#,並取得了巨大的成功。

+0

感謝您的信息。我有hashtags和pushState的經驗,所以我確切地知道你指的是什麼。剛剛有一個想法,並想知道是否有可能。當我寫它時聽起來很瘋狂,但我想我會問 – gmustudent 2013-04-25 19:09:43