我尝试使用jquery pjax在div中加载我的内容。这工作正常,但如果我重新加载页面我没有内容。我想我需要将页面内容放在else {part,但我不想在php变量中设置整个html。如何解决这个问题?
的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';
}
?>
wrapper.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';
}
?>
答案 0 :(得分:1)
在没有PJAX(==正常方式)请求页面时,您只包含wrapper.php。在wrapper.php中,内容为空。
在wrapper.php中,如果请求源不是PJAX,则应该包含正确的页面:
首先,您应该重命名一些文件。使用index.php作为主要布局文件(您打算用包装器做什么)。添加p作为查询参数(在PHP中可以读为真$_GET
)以在单击链接时加载页面。
创建一个文件home.php,它将是#content
在index.php中加载的默认页面。
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。它是一个具有许多现成功能的框架。它已被证明是“容易”学习......