Я пытаюсь использовать 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';
}
?>
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';
}
?>
Вы включаете файл wrapper.php только тогда, когда страница запрашивается без PJAX (== обычным способом). В wrapper.php содержимое пустое.
В wrapper.php вы должны включить правильную страницу, если источником запроса не является PJAX:
Прежде всего, вы должны переименовать некоторые файлы. Используйте index.php в качестве основного файла макета (что вы намеревались сделать с оберткой). Добавьте p как параметр запроса (который может быть прочитан как true $_GET
в PHP) для загрузки страниц при нажатии на ссылки.
Создайте файл 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. Это фреймворк, который имеет много готовых к использованию функций. Это оказалось «легко» учиться …
Других решений пока нет …