解决状态混乱问题
我使用 Jquery 地址构建了一个简单的深度链接页面,并遵循以下示例:
http://www.asual.com/jquery/address/samples/state/
现在,在此示例中,HTML5 浏览器(我使用 Chrome 10)显示实际显示的源。即 http://www.asual.com/jquery/address/samples/state/ folio 在 content
div 中显示 Portfolio 内容。
,即使该内容是通过 Jquery 地址/Ajax/$('.content') 插入的.html()
。我重建了这个示例,但在我的页面上,源始终是执行任何 Ajax 之前的初始页面之一。这与非 HTML5 浏览器中的行为相同。
我做错了什么?
感谢您的提示,
托马斯
编辑:
这是演示代码:
<script type="text/javascript">
$.address.init(function() {
// Initializes the plugin
$('.nav a').address();
}).change(function(event) {
// Selects the proper navigation link
$('.nav a').each(function() {
if ($(this).attr('href') == ($.address.state() + event.path)) {
$(this).addClass('selected').focus();
} else {
$(this).removeClass('selected');
}
});
// Handles response
var handler = function(data) {
$('.content').html($('.content', data).html()).show();
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};
// Loads the page content and inserts it into the content area
$.ajax({
url: $.address.state() + event.path,
error: function(XMLHttpRequest, textStatus, errorThrown) {
handler(XMLHttpRequest.responseText);
},
success: function(data, textStatus, XMLHttpRequest) {
handler(data);
}
});
});
// Hides the tabs during initialization
document.write('<style type="text/css"> .content { display: none; } </style>');
</script>
我的代码几乎相同。我删除了链接突出显示,更改了 URL 以匹配我的网站,并更改了 Ajax 调用,因为我正在加载 html。我想知道是否还有“更多的东西”(比如必要的 .htaccess,文档中并没有真正提到它,但我在项目的 GitHub 中找到了它)。
这是我的代码:
$.address.init(function(event) {
$('#blogMenu a').address();
$('#blogBottomMenu a').address();
$('.linkleiste a').address();
}).change(function(event) {
var value = $.address.state().replace(/^\/$/, '') + event.value;
value = value.replace(/^\/blog\//,'');
value = value.replace(/_/,'');
var teile = value.split('/');
var name = '';
var thema = '';
if(teile[0]) name = teile[0];
if(teile[1]) thema = teile[1];
$('#blog').hide();
if(!value.match(/ADFRAME/)) {
$(document).scrollTo('#aufmacher','fast');
$('#blogMenu').load('/snp/blog_menu.snp',{A_NAME:name,ETIKETT:thema,id:id});
$('#blog').load('/blog/article.snp',{A_NAME:name,ETIKETT:thema,id:id},function() {
$('#blog').show();
});
}
else {
$('#blog').fadeIn('fast');
}
});
I built a simple deep linking page using Jquery address and following this example:
http://www.asual.com/jquery/address/samples/state/
Now in this example, a HTML5 Browser (I use Chrome 10) shows the actual displayed source. I.e. http://www.asual.com/jquery/address/samples/state/portfolio shows Portfolio content.
in the content
div, even though that content was inserted via Jquery address/Ajax/$('.content').html()
. I rebuilt this example, but on my page the source is always the one of the initial page, before any Ajax was executed. This is the same behaviour as in a non HTML5 browser.
What am I doing wrong?
Thanks for hints,
thomas
edit:
Here's the demo code:
<script type="text/javascript">
$.address.init(function() {
// Initializes the plugin
$('.nav a').address();
}).change(function(event) {
// Selects the proper navigation link
$('.nav a').each(function() {
if ($(this).attr('href') == ($.address.state() + event.path)) {
$(this).addClass('selected').focus();
} else {
$(this).removeClass('selected');
}
});
// Handles response
var handler = function(data) {
$('.content').html($('.content', data).html()).show();
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};
// Loads the page content and inserts it into the content area
$.ajax({
url: $.address.state() + event.path,
error: function(XMLHttpRequest, textStatus, errorThrown) {
handler(XMLHttpRequest.responseText);
},
success: function(data, textStatus, XMLHttpRequest) {
handler(data);
}
});
});
// Hides the tabs during initialization
document.write('<style type="text/css"> .content { display: none; } </style>');
</script>
Mine's pretty much identical. I removed the link highlighting, changed the URLs to match my site and changed the Ajax call since I'm loading html. I wonder if there's "something more" to it (like the neccessary .htaccess which the documentation doesn't really speak about but which I found in the project's GitHub).
Here's my code:
$.address.init(function(event) {
$('#blogMenu a').address();
$('#blogBottomMenu a').address();
$('.linkleiste a').address();
}).change(function(event) {
var value = $.address.state().replace(/^\/$/, '') + event.value;
value = value.replace(/^\/blog\//,'');
value = value.replace(/_/,'');
var teile = value.split('/');
var name = '';
var thema = '';
if(teile[0]) name = teile[0];
if(teile[1]) thema = teile[1];
$('#blog').hide();
if(!value.match(/ADFRAME/)) {
$(document).scrollTo('#aufmacher','fast');
$('#blogMenu').load('/snp/blog_menu.snp',{A_NAME:name,ETIKETT:thema,id:id});
$('#blog').load('/blog/article.snp',{A_NAME:name,ETIKETT:thema,id:id},function() {
$('#blog').show();
});
}
else {
$('#blog').fadeIn('fast');
}
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您能设置一个演示供我们查看会更有帮助。但是通过查看您的代码,您需要确保在加载所有内容之前触发该事件。
此外,当没有哈希时,您可能必须触发哈希更改。
通过查看那里的代码,看起来他们使用的布局与您的不同。
如果您设置了演示,我将更新我的答案。
It would be more helpful if you would have setup a demo for us to look at. But by looking at your code you need to make sure you trigger the event before everything is loaded.
Also you might have to trigger a hash change when there is no hash.
By looking at there code it looks like they use a different layout from yours.
If you set up a demo I'll update my Answer.