【问题标题】:jquery pjax with php. no content at reloadjquery pjax 与 php。重新加载时没有内容
【发布时间】:2015-11-23 22:52:27
【问题描述】:

我尝试使用 jquery pjax 将我的内容加载到 div 中。这工作正常,但如果我重新加载页面我没有内容。我想我需要将页面内容放在 else{ 部分,但我不想将整个 html 设置在 php 变量中。如何解决这个问题?

index.php:

<?php
    $title = 'Home';
    if(isset($_SERVER['HTTP_X_PJAX']) && $_SERVER['HTTP_X_PJAX'] == 'true'){ ?>
        <div id="content">
            <h1>home</h1>
        </div>
    <?php echo "<title>{$title}</title>";
    }else{
        include 'wrapper.php';
    }
?>

包装器.php:

<ul class="nav navbar-nav" style='margin-left:20px;'>
    <li><a href='index.php' data-pjax='content'>Home</a></li>
    <li><a href='page1.php' data-pjax='content'>Demo 1</a></li>
    <li><a href='page2.php' data-pjax='content'>Demo 2</a></li>
</ul>
<div id="content"></div>

JS:

$(document).ready(function() {
    $(document).pjax('a[data-pjax]', '#content', { 
        fragment: '#content' 
    });
});

page1.php

<?php if(isset($_SERVER['HTTP_X_PJAX']) && $_SERVER['HTTP_X_PJAX'] == 'true'){  ?>
    <div id="content">
        <h1>Page 1</h1>
    </div>
<?php } else{ include 'wrapper.php';} ?> 

page2.php

<?php if(isset($_SERVER['HTTP_X_PJAX']) && $_SERVER['HTTP_X_PJAX'] == 'true'){
?>
    <div id="content">
        <h1>Page 2</h1>
    </div>
<?php }else{
    include 'wrapper.php';
}
?>

【问题讨论】:

    标签: php jquery ajax dynamic pjax


    【解决方案1】:

    只有在没有 PJAX 的情况下请求页面时才包含 wrapper.php(== 正常方式)。在 wrapper.php 中内容为空。

    如果请求来源不是 PJAX,则应在 wrapper.php 中包含正确的页面:

    首先你应该重命名一些文件。使用 index.php 作为主要布局文件(你打算用包装器做什么)。添加 p 作为查询参数(在 PHP 中可以读取为 true $_GET)以在单击链接时加载页面。

    创建一个 home.php 文件,这将是在 index.php 的#content 中加载的默认页面。

    index.php

    <ul class="nav navbar-nav" style='margin-left:20px;'>
        <li><a href='index.php' data-pjax='content'>Home</a></li>
        <li><a href='index.php?p=1' data-pjax='content'>Demo 1</a></li>
        <li><a href='index.php?p=2' data-pjax='content'>Demo 2</a></li>
    </ul>
    <div id="content">
        <?php if(!isset($_SERVER['HTTP_X_AJAX'])) {
            if(!isset($_GET['p'])) {
                include('home.php');
            }
            else {
                include('page'.$_GET['p'].'.php');
            }
        } ?>
    </div>
    

    这是一个非常简单的例子。在实时应用程序中,这应该以另一种方式完成,以保护脚本免受某些攻击。

    我猜你是首发。请看一下 CodeIgniter。它是一个具有许多现成功能的框架。它已被证明是“容易”学习...

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多