【发布时间】:2013-07-01 04:05:54
【问题描述】:
我有以下示例,当用户单击导航行时,它会使用 AJAX 加载一些内容,并使用 jquery history.js https://github.com/browserstate/History.js/ 插件更新 url 和标题以执行一些 HTML5 历史记录。
ajaxNav: function () {
$('#uiTabs li a, .ajax').live('click', function (e) {
e.preventDefault();
$('<div id="uiLoader"></div>').appendTo('body').hide().fadeIn();
var url = $(this).attr('href');
var bodyid = $(this).data('body');
$.ajax({
url: url,
timeout: 5000,
success: function (responseHtml) {
isAjaxNav = true;
var content = $(responseHtml).find('#ajax-nav-html');
$('.uiContent > .uiPadding').html(content.hide().fadeIn('slow'));
History.pushState(null, $(responseHtml).filter('title').text(), url);
$('body').attr('id', bodyid);
$('#uiLoader').fadeOut(function () { $('#uiLoader').remove() });
},
error: function (jqXHR, textStatus, errorThrown) {
if (textStatus == 'timeout') {
uiModal.errorTimeoutModal(jqXHR, textStatus, errorThrown);
} else if (jqXHR.status == "500") {
uiModal.error500Modal(jqXHR, textStatus, errorThrown);
} else if (jqXHR.status == "404") {
uiModal.error404Modal(jqXHR, textStatus, errorThrown);
} else {
uiModal.errorUnknownModal(jqXHR, textStatus, errorThrown);
}
$('#uiLoader').fadeOut(function () { $('#uiLoader').remove() });
}
});
});
},
但是,当用户单击后退或前进按钮时,它会更改 url 和标题(因为插件支持此功能)但内容不会更改!我将如何检测到这一点,以便我可以使用例如$('location').att('pathname'); 读取新的 url,然后再做一些 ajax?
例如:
//IF back button or forward button clicked or relevant function e.g backspace
$(<!-- ? -->).click(function() {
// Get the current url when the back or forward button was clicked
var url = $('location').att('pathname');
$.ajax({
url: url,
timeout: 5000,
success: function (responseHtml) {
isAjaxNav = true;
var content = $(responseHtml).find('#ajax-nav-html');
$('.uiContent > .uiPadding').html(content.hide().fadeIn('slow'));
History.pushState(null, $(responseHtml).filter('title').text(), url);
$('body').attr('id', bodyid);
$('#uiLoader').fadeOut(function () { $('#uiLoader').remove() });
},
error: function (jqXHR, textStatus, errorThrown) {
if (textStatus == 'timeout') {
uiModal.errorTimeoutModal(jqXHR, textStatus, errorThrown);
} else if (jqXHR.status == "500") {
uiModal.error500Modal(jqXHR, textStatus, errorThrown);
} else if (jqXHR.status == "404") {
uiModal.error404Modal(jqXHR, textStatus, errorThrown);
} else {
uiModal.errorUnknownModal(jqXHR, textStatus, errorThrown);
}
$('#uiLoader').fadeOut(function () { $('#uiLoader').remove() });
}
});
});
【问题讨论】:
-
你没有表现出努力,但不幸的是,我不能像你对我那样对你投反对票。答案就在 history.js 中。再次阅读它的文档。作者提供了完整的注释版本。
-
真的吗?您能否在我查看文档时显示链接,但我没有看到任何有关处理此问题的信息...我已经看到了
History.back()函数,但这不是我需要的!
标签: jquery