我有一个功能性的wordpress主题,通过ajax加载内容。我遇到的一个问题是,当直接加载页面时,ajax脚本不再有效。例如,链接结构的工作原理如下,在www.example.com上点击about页面链接,然后链接变为www.example.com/#/about。但是,当我直接加载独立页面www.example.com/about时,从此页面点击的其他链接将变为www.example.com/about/#/otherlinks。我从这个tutuorial http://www.deluxeblogtips.com/2010/05/how-to-ajaxify-wordpress-theme.html修改了一些代码。这是我的代码。谢谢你的帮助。
jQuery(document).ready(function($) {
var $mainContent = $("#container"),
siteUrl = "http://" + top.location.host.toString(),
url = '';
$(document).delegate("a[href^='"+siteUrl+"']:not([href*=/wp-admin/]):not([href*=/wp-login.php]):not([href$=/feed/]))", "click", function() {
location.hash = this.pathname;
return false;
});
$(window).bind('hashchange', function(){
url = window.location.hash.substring(1);
if (!url) {
return;
}
url = url + " #ajaxContent";
$mainContent.fadeOut(function() {
$mainContent.load(url,function(){
$mainContent.fadeIn();
});
});
});
$(window).trigger('hashchange');
});
答案 0 :(得分:2)
您所表达的问题并不容易解决。有多个因素岌岌可危,但归结为:
正如您所知,网址www.example.com/about/中没有哈希部分。因此,您的脚本无法更改此部分,否则会触发页面重新加载 了解这一事实后,您的脚本只会通过添加新的哈希部分或修改现有哈希部分来更改URL,而只留下URL的“路径名”部分。因此,您可以获得www.example.com/about /#/ otherlinks等网址。
现在,从我的观点来看,有两种方法可以解决你的问题。
首先,有一个API that can modify the whole URL pathame without reload,但it's not available everywhere。使用此解决方案并回退到旧浏览器的经典页面重新加载是cleaner method。
否则,您可以强制页面重新加载一次,将URL重置为www.example.com/,并从良好的基础开始。这是代码:
$(document).delegate("a[href^='"+siteUrl+"']:not([href*=/wp-admin/]):not([href*=/wp-login.php]):not([href$=/feed/]))", "click", function() {
location = location.assign('#' + this.pathname);
return false;
});
应该注意的是,如果您的站点不在路径名的根目录下,则此脚本将不起作用。因此,要使其适用于www.example.com/mysite/,您需要更改正则表达式。
请告诉我它是怎么回事。