Javascript 正确使用History.js和AJAX动态加载
我正在创建一个网站,希望通过AJAX动态加载页面。我正在使用,但我认为我做得不太对 基本上我有一个index.php页面和一些其他页面:portfolio.php、contact.php等等。这些附加php文件包含的是一个简单的HTML/php代码,它必须动态替换索引页面中的DIV内容,称为#post content 当我单击索引页面中的菜单链接时,会调用JS函数showPage(),该函数只使用页面名,不使用“.php”作为参数。函数声明如下:Javascript 正确使用History.js和AJAX动态加载,javascript,php,jquery,ajax,history.js,Javascript,Php,Jquery,Ajax,History.js,我正在创建一个网站,希望通过AJAX动态加载页面。我正在使用,但我认为我做得不太对 基本上我有一个index.php页面和一些其他页面:portfolio.php、contact.php等等。这些附加php文件包含的是一个简单的HTML/php代码,它必须动态替换索引页面中的DIV内容,称为#post content 当我单击索引页面中的菜单链接时,会调用JS函数showPage(),该函数只使用页面名,不使用“.php”作为参数。函数声明如下: function showPage(page)
function showPage(page) {
var History = window.History;
History.pushState(null, page, "index.php?page=" +page);
$("#post-content").load(page + ".php");
}
在上面的函数中,还实现了其他视觉效果,如fadeIn或fadeOut,但我删除了它们,以使代码更具可读性
该函数为我提供了所需的一切,或几乎所有。使用Google Chrome测试我的网站,如果我单击菜单中的特定链接,例如“公文包”,我将正确地进入?page=portfolio.php。如果我在浏览器中手动键入URL(例如,如果其他人给我该页面的直接链接),则不会发生这种情况。这是因为未调用函数showPage()
因此,我在index.php页面上方包含了一个外部代码:
<?php
if(isset($_GET['page'])) { // Checks if the url contains the "page" parameter.
?>
<script>
$(function() {
showPage('<? echo htmlentities($_GET['page']); ?>');
});
</script>
<?
}
?>
$(函数(){
显示页(“”);
});
这给了我想要的结果
在这一点上,我需要一个专家的建议。我做得对吗?这是在网站中实现jQueryAjax的正确方法吗?我想我做错了,大错特错。网络上的COE和我的很不一样,不过看起来一切都很好。我该怎么办
在此讨论中的任何帮助都将不胜感激:)谢谢 我想说的第一件事是——我说过better load在客户端完成所有这些工作——所以您只支持一个代码(在客户端) 但这将导致页面加载后出现多个ajax调用。您可以通过将数据包含到php代码/模板中(如示例所示)来防止这种情况,但在这种情况下,您还需要支持服务器端代码/更改(如果您希望从头生成页面) 另一种方法不是生成页面,而是只生成将通过ajax获取的数据,并将其包含到页面中,然后将该数据与js一起使用,而不是执行不必要的ajax调用 所以在代码旁边: 所以你可以检查这个叉子: 如您所见,我只是在init中添加了帧加载
//simple function to load iframe (may be done with div and ajax)
function loadiframe() {
$('#iframe').load('../index.php');
}
及
及
及
我还没有看过路线和主干线,但似乎路线(或类似的东西)是您需要的
我认为这很神奇,可以自动检测必须加载的状态(加载或历史更改等),并执行所需的功能
或者你可以看看这个解决方案-
因此,使用RouterJs,您将拥有相同的History.js,但没有更多的功能。我想说的第一件事是,更好的加载在客户端完成所有这些工作,所以您只支持一个代码(在客户端) 但这将导致页面加载后出现多个ajax调用。您可以通过将数据包含到php代码/模板中(如示例所示)来防止这种情况,但在这种情况下,您还需要支持服务器端代码/更改(如果您希望从头生成页面) 另一种方法不是生成页面,而是只生成将通过ajax获取的数据,并将其包含到页面中,然后将该数据与js一起使用,而不是执行不必要的ajax调用 所以在代码旁边: 所以你可以检查这个叉子: 如您所见,我只是在init中添加了帧加载
//simple function to load iframe (may be done with div and ajax)
function loadiframe() {
$('#iframe').load('../index.php');
}
及
及
及
我还没有看过路线和主干线,但似乎路线(或类似的东西)是您需要的
我认为这很神奇,可以自动检测必须加载的状态(加载或历史更改等),并执行所需的功能
或者你可以看看这个解决方案-
因此,使用RouterJs,您将拥有相同的History.js,但没有更多的功能。我认为您应该在客户端使用js制作这一部分,而不是在服务器端使用php。一定有一些加载器可以检测url参数并导航到您想要的确切页面/菜单项,但现在无法制作一个工作示例,但如果没有答案,我将在今天晚些时候制作一个,以说明我的意思。我认为您应该在客户端使用js制作此部分,而不是在服务器端使用php。一定有一些加载器可以检测url参数并导航到您想要的确切页面/菜单项,但现在无法给出有效的示例,但如果没有答案,我将在今天晚些时候给出一个示例来说明我的意思
// Bind to State Change
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
// Log the State
var State = History.getState(); // Note: We are using History.getState() instead of event.state
if (State.data.state == 666) {
loadiframe();
}
History.log('statechange:', State.data, State.title, State.url);
});
History.Adapter.onDomLoad(function(){
console.log('loaded');
$('#loadiframe').click(function(){
History.pushState({state:666,rand:Math.random()}, "State 666", "?state=666");
});
});
var Workspace = Backbone.Router.extend({
routes: {
"help": "help", // #help
"search/:query": "search", // #search/kiwis
"search/:query/p:page": "search" // #search/kiwis/p7
},
help: function() {
...
},
search: function(query, page) {
...
}
});
RouterJs is a simple router for your ajax web apps. It's build upon History.js