2014-02-10 19 views
0

我正在使用Ajaxify這似乎是現在最好的ajax/history.js組合(但歡迎任何其他建議),並且所有設置和工作都是I需要。但是,有一個小問題。當你點擊該網站時,URL會根據內容改變,使用history.js(所以如果你點擊'About',你會在瀏覽器中看到www.mysite.com/about)。這很好地與後退按鈕配合使用,但問題是當您在此階段刷新頁面,或者直接轉到例如www.mysite.com/about,並且您只能看到ajax內容,而不是整個站點。Ajaxify(或只是一般的阿賈克斯)直接URL

如果被訪問的直接URL,網站加載的普通視圖,那麼該URL匹配的AJAX內容裝載塊。

這是可能的,或者有沒有人有任何我想要做的是建議?

謝謝, ř

回答

0

唯一的選擇是,以改變該服務器側。一種可能的變化是:當服務器收到正常的請求(不管URL是什麼)時,它總是生成主頁面(不要與重定向混淆)。這個主頁面將觸發JavaScript,它將通過AJAX(基於URL)加載內容。

現在,服務器應該根據請求是否是AJAX生成不同的輸出:如果是,它將返回內容,如果不是則返回主頁面。您可以通過查看X-Requested-With標題來區分AJAX和非AJAX請求。

2

這是可能的,但一個可怕的想法。

無論你是這樣做還是一個體面的解決方案,起點都是一樣的:你需要區分一個頁面請求和一個Ajax數據請求。

其餘的頁面應該是默認的假設。當您使用Ajax發出請求時,您可以向URL添加查詢字符串,設置不同的Accept標題,添加自定義標題(例如x-requested-with: xmlhttprequest)等等。

然後您可以返回適當的數據。


您建議您始終返回主頁,然後使用JavaScript加載不同的數據以替換它。你可以這樣做(只要在load事件觸發時檢查location.href),但它錯過了使用歷史API的觀點,不適用於搜索引擎,並且在JS失敗時不起作用。

您也有性能問題,因爲您正在加載一個頁面,然後立即將其替換。這很慢,並向用戶展示了Twitter在幾個版本之前遭遇的可怕的Flash Of The Homepage,然後他們開始正常工作並開始正常工作。


做正確的事情 - 在服務器上組裝完整的頁面,並提供一個完整的HTML文檔的瀏覽器。在鏈接(或其他)被點擊之前,不要做任何Ajax,以便加載新的「頁面」。

+0

1)爲什麼JS會失敗?如果它是一個錯誤,那麼它是一個錯誤 - 與動態URL更改無關。 2)性能問題取決於他如何做到這一點。如果他只是通過非AJAX加載並清空頁面(或標題),然後加載內容,那麼幾乎沒有性能影響(類似於gmail加載)。也沒有什麼可替代的,所以沒有閃光燈(他也可以添加一個加載器,再一次gmail是如何做的)。 3)唯一真正的問題是搜索引擎。 – freakish

+1

1)因爲:瀏覽器可能不支持JS *或*用戶可能已關閉JS或*用戶在移動連接上通過隧道加載JS *或*您的CDN下降*或*您的JavaScript被廣告攔截器(等等等)誤分類爲廣告 – Quentin

+1

2)與GMail類似?你的意思是「慢慢」? – Quentin