2010-04-19 71 views
0

我有一個頁面,其中包含一個使用JQuery AJAX調用來填充頁面的菜單。爲了反映任何更改,我使用#...更新URL ...而不是... ...或/ ...因此,最初讀取的URL:htpp:// localhost/pages/index/id = 1看起來像:http://localhost/#pages/index/id=1 。如果用戶爲此書籤並稍後回到頁面,我想知道是否可以在我的路由解碼中使用第二個URL,或者如果我必須將其加載到空白處,然後使用相同的JS/Ajax來填充頁面?書籤帶MVC路由的ajax調用

在我看來,如果用戶複製鏈接並將其郵寄給禁用JavaScript的朋友,則在這些情況下使用Ajax會有問題。

編輯#1:修正了一些拼寫。

編輯#2:澄清問題點:我想要一個網站,我可以做到以下幾點: (一):打開javascript,使用ajax調用來替換div的內容(無需重新加載(a) (c):將URL發送給打開了noscript的人,並且具有相同的頁面(頁面) (b):打開javascript後,將頁面書籤爲ajax調用後的頁面。就像在ajax調用之後。 (a)和(b)在我的頁面上工作得很好,但(c)看起來不可能。

+0

這是可能的,但我不知道如何。你可以看看這個網站,http://thinkav.co.nz/它是jQuery的動力,我想你正在尋找同樣的風格......運行良好,有或沒有Javascript。 – Reigel 2010-04-19 09:09:02

+0

thinkav.co.nz無法正常工作,如果您瀏覽網站,請複製網址並將其發送給安裝了noscript的用戶,他們不會進入您複製的同一頁面。 – devzero 2010-04-20 07:17:51

回答

1

目前,您可以在不導致瀏覽器重定向的情況下更新URL的唯一部分就是哈希。這部分URL不會在請求中發送到服務器,並且僅可用於客戶端處理,因此不能用於提供無鏈接的方式提供鏈接。

您面臨的問題是使用AJAX的問題中常見的問題。我遇到的最好的解決方案是提供一種方法來查看每個頁面的任何AJAX加載狀態,通過一個「真正的」URL,一個將被傳遞到服務器。

這意味着你有一個網址提供了一個頁面的狀態的「快照」:

http://localhost/pages/index/1/someaction

並提供在客戶端的瀏覽器頁面的局部狀態的AJAX特定網址:

http://localhost/pages/index/1#someaction

結果,你最後要做的是提供一種產生從AJAX版本的「快照」鏈接頁面的一些手段。 「鏈接到此頁面」或「永久鏈接」按鈕是一個合理的選擇。

1

這不可能僅僅是因爲#符號(片段標識符)之後的所有內容都不會發送到服務器,並且服務器無法捕獲此值,因此無法使用它進行路由。

+0

有沒有其他解決方法?即一種發送ajax/javascript網址給JS禁用的用戶的方法? – devzero 2010-04-19 08:55:09

+0

在您的控制器操作中,您可以測試「Request.IsAjaxRequest()」並返回視圖或部分視圖,具體取決於是使用ajax還是純HTTP請求調用此操作。 – 2010-04-19 09:50:56

+0

我不認爲你瞭解這個問題,請參閱編輯#2。 – devzero 2010-04-20 07:25:33

0

你可以嘗試用'?'替換'#'這會將其餘部分作爲get變量發送,因此您可能需要執行一些tweeks,例如將格式更改爲http://localhost/?pages=index&id=1

您可以使用Web服務器設置一些奇特的事物,以便重新設置localhost/article/fancystuff -directed to localhost/article.php?title=fancystuff

有很多方法可以讓AJAX網站使用書籤和後退按鈕。但你應該問自己,你想讓人們做某些事情。通常,AJAX用於更高級的Web應用程序,它不能很好地映射到傳統的來回模型。

編輯

與你有什麼補充的問題。我會說,因爲你想完全支持那些害怕Javascript的用戶,你需要使你的網站完全不依賴任何AJAX。但是你應該以這種方式來設計它,即頁面內容包含在單獨的文件中。這意味着當你添加額外的Javascript時,它可以加載文件並將它或多或少地直接放入頁面上的內容持有者。

您確實需要記住,您不能強制某個人接受書籤或強制更改書籤。起訴餅乾可能會最好地滿足您的要求。幸運的是,更少的人害怕餅乾,幾乎沒有人會禁用它們,除非他們是偏執狂或者某些事情。

+0

是否可以用#替換#。我雖然這會導致頁面重新加載女巫有點擊敗Ajax電話的目的首先。 – devzero 2010-04-19 09:01:12

+0

URL中散列的最初目的是在頁面中放置一個標記,這樣您可以讓用戶滾動到某個部分。如果您在網址末尾放置散列符號,可能會導致瀏覽器無法加載新頁面,但完整的校樣方法會在onlick處添加某種'void(0)'或'return false;' 標籤。 – thecoshman 2010-04-19 10:28:26

+0

我完全不理解您評論的相關性。如果您不瞭解問題,請參閱我的編輯#2。 – devzero 2010-04-20 07:24:57