Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确使用History.js和AJAX动态加载_Javascript_Php_Jquery_Ajax_History.js - Fatal编程技术网

Javascript 正确使用History.js和AJAX动态加载

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)

我正在创建一个网站,希望通过AJAX动态加载页面。我正在使用,但我认为我做得不太对

基本上我有一个index.php页面和一些其他页面:portfolio.php、contact.php等等。这些附加php文件包含的是一个简单的HTML/php代码,它必须动态替换索引页面中的DIV内容,称为#post content

当我单击索引页面中的菜单链接时,会调用JS函数showPage(),该函数只使用页面名,不使用“.php”作为参数。函数声明如下:

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