起初我想说,我是网络开发的新手,缺少一些具体的科学术语。
我在后端使用金字塔,在前端使用变色龙。现在我有一个主页面,我发送了一些ajax请求。收到响应后,我有一个DOM操作回调。 浏览器不保存AFAIK dom操作,因此用户无法点击后退按钮。但是这个机制是如何调用的 - 或者我如何获得ajax响应和一个独特的URL?网址可以是当前的一个+ params或paras的sha1。
我是否需要在服务器端实现特定的处理程序,或者这可以由客户端完成吗?
在google的帮助下我才能发现,我无法在浏览器中保留dom操作的状态。因此,每个请求都需要一个唯一的网址 - >因此我认为这必须在服务器端完成,但正如所说,我是新的。
谢谢:)
编辑: 该网站 - 我正在编程 - 可以想象为'谁想成为百万富翁'。我们有几轮,在每一轮中,用户可以在几个答案之间进行选择,其中每一轮都取决于最后一轮。 很难为此添加代码,因为它是我博士学位的一部分而且非常庞大:\
答案 0 :(得分:2)
(首先,Chameleon没有运行&#34;在前端&#34; - 它是一个Python模板库,它接受一个字符串(您的模板)和一个python dict(模板参数)作为输入并返回另一个字符串作为其输出。当发送到客户端时,浏览器将该输出解释为HTML页面,可能带有嵌入的<script>
标签。然后,这些标签中的JavaScript由浏览器执行 - &#39;什么在客户端上运行。)
现在,关于你的问题:)你可以从JavaScript更改浏览器地址字符串中显示的URL,这将在浏览器的历史记录中插入一个新条目。您还需要以某种方式确保您的应用程序可以根据新URL中的信息恢复其状态,否则如果有人为URL添加书签,在新选项卡中打开它或只是重新加载应用程序,则会中断。
一种历史较早的操纵浏览器历史记录的方法是通过window.location.hash修改网址的哈希部分。这是一个最小的例子:
<html>
<body>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<input id="name-input" type="text" />
<script>
// restore the "application state" on page load -
// if there's a hash in the url we set the text in the input
if (window.location.hash) {
$('#name-input').val(window.location.hash.substring(1));
}
// whenever the hash changes (user clicked the Back button)
// we also need to modify the application state
$(window).on('hashchange', function () {
$('#name-input').val(window.location.hash.substring(1));
});
// type some text in the input and press Enter.
// Observe the URL changing. Try using the Back button.
$('#name-input').on('change', function () {
window.location.hash = $(this).val();
});
</script>
</body>
</html>
修改历史记录的另一种更现代的方法是通过history.pushState(),它更强大,但可能需要一些服务器端支持(您的服务器需要能够从新URL提供正确的页面)您的应用已转换为 - 如果您的网址看起来像mysite.com/page1
,mysite.com/page2
,并且您使用pushState
从/page1
过渡到/page2
- 服务器需要能够处理这两个网址。)
您还需要注意,有一整套客户端框架专门用于处理这种情况(检索JSON数据,呈现页面,修改URL),所以也许你&#39 ;发现使用客户端框架而不是手动操作简化了事情。我首先要看Backbone.js,因为它非常小,并且不要求你用'而且只有真正的方式'来做事情。像其他一些框架一样。