加载动态php和mysql页面而不刷新--AJAX

时间:2012-02-13 15:11:44

标签: php jquery mysql ajax refresh

在过去的几天里,我正在网上闲逛一个脚本,这个脚本有我想要的元素..最好的就是这个http://www.queness.com/post/328/a-simple-ajax-driven-website-with-jqueryphp,但是有很多问题,我需要更好的地方溶液:

  • 我想要没有标签:我想要所有链接来加载文件夹(www.site.com/first/site/)。这可以在github上运行magicaly(单击此处https://github.com/spjoe/deluge-yarss-plugin,然后单击随机文件并在观看地址栏时返回)。如果有人知道他们做了什么或如何做,那将非常酷。

  • 我需要动态内容:上面的脚本只从switch函数加载“case”,而我需要php检查url并在mysql数据库中找到一个文件,并根据url从所需的表中回显出内容,如果它在db ofcourse中找到(如果我指向site.com/harvey的链接,php应该在数据库中找到Harvey并显示例如他的手机,地址和其他详细信息,而这不能预先加载但只是请求由于带有问题而点击了。)

  • 历史记录:我希望有一个选项可以让网站上的后退和前进动作完美无缺,并且点击链接时可以使用动画。

  • changable div中的工作链接:因为某些脚本存在问题,这些脚本不会更改链接所在的内容(例如,第一个内容框包含导航,应该使用不同的导航替换第二个方框),再次与github合作很好..

我希望你能给我一些链接或者更多帮助我们的代码..

2 个答案:

答案 0 :(得分:1)

我认为您要查找的脚本是pjax,它具有您想要的所有功能。你可以在github上找到它:https://github.com/defunkt/jquery-pjax/tree/heroku

修改

您可以使用任何您喜欢的服务器端语言。例如,

<script src="jquery.js"></script>
<script src="jquery.cookie.js"></script>

<script src="jquery.pjax.js"></script>
<script type="text/javascript">
    $(function(){
      $('nav a').pjax('#content')
    })
</script>

在您的网站上,

<nav>
  <a href="otherContent1.php" >click me for other content</a>
  <a href="otherContent2.php" >click me for even more additional content</a>
</nav>
<section id="content">
  <h1>Original Content</h2>
  <p>
    this will be replaced by pjax with the content's of <a href="otherContent1.php">otherContent1.php</a> or <a href="otherContent2.php">otherContent2.php</a> 
  </p>
</section>
在您的主模板中

并修改您的PHP代码,以便它查找HTTP_X_PJAX标题。如果它存在(请参阅xhr.setRequestHeader('X-PJAX', 'true'))仅渲染应替换<section id="content">内容的部分,否则渲染整个页面。 Pjax足够智能,如果它有效,它将只替换<section id="content">的内容,如果它不起作用,你仍然可以使用常规链接。如果你正在使用谷歌分析,pjax甚至会处理谷歌分析,所以你的跟踪仍然有效。

EDIT2:示例

好的,这里有一个示例php页面。请注意我测试这个,我只是在堆栈溢出时快速写入它,以显示你可以解决这个问题。此代码未经测试,当然不是生产就绪。但作为一个例子,你可以做这样的事情(该文件应该命名为index.php):

<?php
$render_template=true;
if ($_SERVER["HTTP_X_PJAX"])
{
    $render_template=false;
}
?>

<?php
if ($render_template) {
?>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Testing Pjax</title>
        <script src="jquery.js"></script>
        <script src="jquery.cookie.js"></script>

        <script src="jquery.pjax.js"></script>
        <script type="text/javascript">
            $(function(){
              $('nav a').pjax('#content')
            })
        </script>
    </head>
    <body>
        Date in template: <?php echo $today = date("D M j G:i:s T Y"); ?>
        <nav>
            <a href="index.php?content=1" >click me for other content</a>
            <a href="index.php?content=2" >click me for even more additional content</a>
        </nav>
        <section id="content">
<?php 
}
?>
<?php
if ($_Get["content"]==1) 
{
?>

            <h1>Content=1</h1>
            Date in content: <?php echo $today = date("D M j G:i:s T Y"); ?>
            <p>
                this will be replaced by pjax with the content's of <a href="index.php?content=1">index.php?content=1</a> or <a href="index.php?content=2">index.php?content=2</a> 
            </p>
<?php 
} else {
?>
            <h1>Content 2=2</h1>
            Date in content: <?php echo $today = date("D M j G:i:s T Y"); ?>
            <p>
                this will be replaced by pjax with the content's of <a href="index.php?content=1">index.php?content=1</a> or <a href="index.php?content=2">index.php?content=2</a> 
            </p>
<?php 
}
?>
<?php
if ($render_template) {
?>
        </section>
    </body>
</html>
<?php 
}
?>

答案 1 :(得分:0)

如果您希望网址在您抓取网页请求时显示“正确”网址,您可以使用PJAX它会使用pushState更改历史记录,但它不适用于ie6-ie9检查出于兼容性问题而出CanIUse: History