我有以下测试应用程序: http: //dev.driz.co.uk/ajax/
您可以单击链接以使用 jQuery AJAX 在其他页面中加载,并且有两种类型,globalTabs 和 localTabs 将内容加载到不同的面板中。注意:每个页面实际上是整个页面,但我们只使用 jQuery find 方法获取我们想要的内容。
为了增强这一点,我使用了 HTML5 History API(History.js for cross-browser)。
标题和网址更改得很好,历史堆栈被成功推送,当我使用后退和前进按钮时,网址和标题确实恢复了。
现在复杂的部分是从以前的状态加载回内容,更复杂的是加载正确的类型,例如全局或本地 ajax。为了实现这一点,我想我需要将数据和类型都传递给推送状态,以便它可以再次用于 popstate ......
谁能帮我指出正确的方向?我已经完成了所有第一部分的工作,只是将 ajax 类型传递给 pushState,然后通过 popstate 更改重新使用它。
为了改进这一点,我将其重写如下,以显示我传递类型和数据的计划:
注意:大写的 History 是因为我使用 History.js
var App = {
init: function() {
$(document).ready(function() {
$('.globalTabs li a').live('click', function (e) {
e.preventDefault();
App.globalLoad( $(this).attr('href') );
});
$('.localTabs li a').live('click', function (e) {
e.preventDefault();
App.localLoad( $(this).attr('href') );
});
});
window.addEventListener('popstate', function(event) {
// Load correct content and call correct ajax request...
});
},
localLoad: function ( url ) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.localContent').html($(responseHtml).find('#localHtml'));
$data = { $(responseHtml).find('#localHtml'), 'local'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
},
globalLoad: function ( url ) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.mainContent').html($(responseHtml).find('#globalHtml'));
$data = { $(responseHtml).find('#globalHtml'), 'global'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
}
};
App.init();
更新:为了澄清这个问题,这是我寻求帮助的两个问题。
1.) 获取处理 ajax 请求的后退和前进按钮,以便它们将正确的数据加载回内容区域。
2.) 将内容加载到正确的区域,同时使用 pushState 方法传递内容,以便它知道它是全局 div 还是本地 div 请求。