如何解决这个特定问题?
我正在做一个应用程序使用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/
这可能吗?怎么样?
感谢
AJAX是不会更改URL,因为它不会导致重新加载页面(这是使用AJAX的点)。您可以使用window.location.href更改URL,但这会导致浏览器尝试从指定的URL获取。我查了一下,有一些迹象表明,有些浏览器允许你在不重新加载页面的情况下更改地址栏中的URL,但我不会指望这种功能。 (即如果它存在是非常危险的(欺骗,网络钓鱼),并可能会被禁用或改变IMO)
这是一个比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之间进行翻译。
你可以更深入..我读了sammy.js,但我找不到解决我的问题的方法.. – silimer 2011-05-14 01:37:42
您可能必须执行像Google地图那样的网站才能启用链接到富含Ajax的页面。他们有一个“永久链接”,它拥有网址中的所有参数。然后,如果用户稍后访问该链接,则服务器知道如何设置页面。看看谷歌地图如何获取更多信息。在浏览器窗口中看到的实际文档URL不会更改。如果它足够适合谷歌,那么它对我们其他人来说足够好。
你也可以使用hashbangs并使用'history.pushState()'(http://diveintohtml5.org/history.html#illusion),它会回退到旧版浏览器的正常非Ajax行为。 – Tony 2011-06-15 15:30:11