2011-05-13 179 views
0

我正在做一個應用程序使用Django anf python。我的網頁必須分開。左側部分用於使用ajax進行導航,這會將一些數據帶到正確的一側。單擊右側的 它會導致不同的URL。如何解決這個特定問題?

我的網址patters是:

foo.com/main/ 
foo.com/main/a/ 
foo.com/main/a/b/ 
foo.com/main/a/b/c/ 

當過我點擊右側它使一個AJAX調用帶來的數據。但是網址與前一個網址保持不變。所以,我決定使用#!.

但我的問題是: 假設我在URL foo.com/main/a/b/但是Ajax調用後,我想要的網址是 foo.com/main/#!/1/所以,永遠哪一頁我如果我做了一個AJAX調用的URL應該是

foo.com/main/#!/1/ 

這可能嗎?怎麼樣?

感謝

+0

你也可以使用hashbangs並使用'history.pushState()'(http://diveintohtml5.org/history.html#illusion),它會回退到舊版瀏覽器的正常非Ajax行爲。 – Tony 2011-06-15 15:30:11

回答

0

AJAX是不會更改URL,因爲它不會導致重新加載頁面(這是使用AJAX的點)。您可以使用window.location.href更改URL,但這會導致瀏覽器嘗試從指定的URL獲取。我查了一下,有一些跡象表明,有些瀏覽器允許你在不重新加載頁面的情況下更改地址欄中的URL,但我不會指望這種功能。 (即如果它存在是非常危險的(欺騙,網絡釣魚),並可能會被禁用或改變IMO)

0

這是一個比Django問題更多的ajax問題,但沒關係。你希望在你的代碼的客戶端部分中的hash-bang(#!)URL和在Django端定義的URL之間有一個映射。

我建議你找一個Ajax框架來幫助你。受歡迎的包括Sammy.js,Spine.js和(我的首選)Backbone.js。這些幫助您定義客戶端基於散列的URL和通過Ajax訪問數據的後端URL之間的常規映射。我喜歡Backbone,因爲它在來自服務器的數據集之間的關係,它們的訪問URL(用來進行Ajax調用的URL),它們的顯示URL(頁面上顯示的hash-bang URL)以及定義單個方法每個數據項在兩個URL之間進行翻譯。

+0

你可以更深入..我讀了sammy.js,但我找不到解決我的問題的方法.. – silimer 2011-05-14 01:37:42

0

您可能必須執行像Google地圖那樣的網站才能啓用鏈接到富含Ajax的頁面。他們有一個「永久鏈接」,它擁有網址中的所有參數。然後,如果用戶稍後訪問該鏈接,則服務器知道如何設置頁面。看看谷歌地圖如何獲取更多信息。在瀏覽器窗口中看到的實際文檔URL不會更改。如果它足夠適合谷歌,那麼它對我們其他人來說足夠好。