Переменные не сохраняют значения при загрузке ajax

#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"); открывает вас для возможных эксплойтов, если вы не проверяете/не проверяете/не очищаете вводимые пользователем данные