#javascript #php #html #jquery #ajax
Вопрос:
Переменные PHP не сохраняют свои значения, когда AJAX загружает контент.
index.php Вот мой код на index.php:
lt;?php if (empty($_GET["j"])) {@$_GET["j"] = "en";} $lang = htmlspecialchars($_GET["j"]); if (empty($_GET["as"])) {@$_GET["as"] = "home";} $page = htmlspecialchars($_GET["as"]); require_once("/scripts/header.php"); require("/scripts/languages.php"); ?gt; lt;div id="page"gt; lt;?php if (file_exists("pages/".$page.".php")) { include("pages/".$page.".php"); } ?gt; lt;/divgt; lt;navgt; lt;a href="/cs/home" class="link"gt;Domůlt;/agt; lt;a href="/en/contact" class="link"gt;Kontaktlt;/agt; lt;/navgt; lt;script src="/scripts/loader.js"gt;lt;/scriptgt;
.htaccess Мне нужно, чтобы URL-адрес был переписан в соответствии с этим правилом:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)/(.*)$ index.php?j=$1amp;as=$2 [QSA]
languages.php — Там у меня есть некоторые переменные языков, которые мне нужно использовать в загруженном контенте с помощью ajax в #page div
lt;?php if ($lang== "cs") { $headline = "This is title in another language"; $text = " lt;pgt;This is long text in another language.lt;/pgt; lt;pgt;This is second paragraph in another language.lt;/pgt; "; } else { $headline = "This is title"; $text = " lt;pgt;This is long text.lt;/pgt; lt;pgt;This is second paragraph.lt;/pgt; "; } ?gt;
loader.js — Загрузчик Ajax:
$(document).ready(function() { $('nav a.link').click(ChangePage); }); function ChangePage() { var Link = $(this).attr('href'); var Page = Link.substring(4); var Lang= Link.substring(1, 3); var Path = "/pages/" Page ".php"; $.ajax({ url: Path, type: "POST", success: function(result){ $("#page").html(result); document.title = $('#page_wrap').data('title'); }, error: function() { alert("there is some error"); } }); return false; }
home.php — У меня есть такие файлы, как «Дом», «контакты» и т. Д. который мне нужно загрузить в #page div
lt;div id="page_wrap" data-title="Home - Site Name"gt;HOMElt;/divgt; lt;?php echo " lt;brgt;This is lang: ".$lang." lt;brgt;Headline: ".$headline." lt;brgt;Text: ".$text." "; ?gt;
Если я загружаю страницу в первый раз, это работает. После того, как я загружу контент, нажав на ссылку навигации, переменная $lang не определена.. Как я могу это исправить, пожалуйста? Я даже пробовал php-сессию, но она вообще не работала. Есть ли какой — нибудь способ это исправить?
Комментарии:
1. Похоже, вы не передаете эти значения в свой вызов ajax, поэтому он не будет существовать. Помните, что PHP запускается до отправки страницы в браузер, а javascript- после , и любые последующие вызовы ajax не будут иметь доступа к переменным PHP исходной страницы.
2. Сообщение Ajax не имеет ничего общего с PHP… параметры $_GET берутся из URL, PHP запускается до JS, поэтому вы можете передавать переменные из PHP в JS, но не наоборот. PHP не может получать данные со страницы после ее загрузки без новой загрузки страницы с новыми данными либо в URL-адресе, либо в виде сообщения.
3. Как я мог бы проанализировать код ur, вы ничего не повторяете из того
language.php
, что ожидается вresult
переменной?, иecho " lt;brgt;This is lang: ".$lang." lt;brgt;Headline: ".$headline." lt;brgt;Text: ".$text." ";
это не будет работать, поскольку переменные заданы в каком-то другом php, и вы обращаетесь к нему в каком-то другом файле.4. на какой PHP вы отправляете запрос AJAX? Index.php, или home.php? Кроме того, помните, что каждый запрос, который вы отправляете на свой PHP, является отдельным и что переменные из других сценариев или других исполнений того же сценария не существуют ни в одном новом запросе.
5. Использование подобного кода
include("pages/".$page.".php");
открывает вас для возможных эксплойтов, если вы не проверяете/не проверяете/не очищаете вводимые пользователем данные