我正在使用 history.js,并且想在 url 更改时通过 ajax 调用内容。我有这个工作,但问题是我需要页面根据状态更改时加载的 URL 做出不同的响应。例如,在本地范围内,我需要将与右侧导航中的 URL 相关的页面加载到它们旁边的内容区域中。如果 URL 更改为我所在部分之外的范围,我希望 ajax 调用将页面加载到包含整个部分的容器中,包括右侧导航。如何使用 history.js 可靠地对 URL 做出不同的响应?
例子:
我有一些代码可以在单击右侧导航项时更改 URL:
var History = window.History;
$('#right-hand-nav a').on('click', function(event) {
var place = $(this).attr('href');
History.pushState("", "page title", place);
event.preventDefault();
});
...以及一些在 URL 更改时加载不同内容的代码:
History.Adapter.bind(window,'statechange',function() {
var State = History.getState()
subContent = $('#sub-content');
$.ajax({
url: State.url,
beforeSend : function() {
// Would start pre-loader code
},
success : function(result) {
// Would end pre-loader code
subContent.html(result);
}
});
});
但是,如果我希望onstatechange
事件处理程序在新 url 不在此子部分之外时做出不同的反应怎么办?如果我希望它替换$('#primary-content').html()
而不是$('#sub-content').html()
新 URL 导致 AJAX 请求提取不属于的内容$('#sub-content')
怎么办?:
基本 HTML:
<section id="primary-content">
<section id="sub-content">
</section>
<nav id="sub-navigation">
<ul>
<li>
<a href="#">Nav item</a>
</li>
<li>
<a href="#">Nav item</a>
</li>
<li>
<a href="#">Nav item</a>
</li>
</ul>
</nav>
</section>
当 URL 更改为: www.example.com/sub-section/page.html
<section id="primary-content">
<section id="sub-content">
<!-- ajax should load content here -->
</section>
<nav id="sub-navigation">
<ul>
<li>
<a href="#">Nav item</a>
</li>
<li>
<a href="#">Nav item</a>
</li>
<li>
<a href="#">Nav item</a>
</li>
</ul>
</nav>
</section>
当 URL 更改为: www.example.com/page.html
<section id="primary-content">
<!-- ajax should load content here -->
</section>
您如何使用 安全地确定 URL 何时转到不同的部分history.js
?你对这种变化有何反应?