*понимаю, что понаписал много, но по другому, мне кажется, будет не понятна суть проблемы
Всем доброго времени суток
Столкнулся с некоторой проблемой, суть которой я попытаюсь тут изложить.
В результате экспериментов я пришел к выводу, что проблема, вероятно, кроется в mod_rewrite и отсылке запроса посредством AJAX. Однако в чем конкретно заковырка я так и не понял.
Да, знание механизмов работы mod_rewrite и ajax у меня находится не на самом высоком уровне и, уверен, некоторые детали для меня являются упущенными, тем не менее я питаю скромную надежду на устранение этих пробелов и решение моей проблемы
Итак собственно перехожу к сути вопроса.
Имеются следующие rewrite правила:
Код:
|
RewriteEngine On
RewriteBase /
RewriteRule ^[/]?$ index.php?page=main [QSA]
RewriteRule ^news[/]?$ index.php?page=news [QSA] |
Т.е. мы устанавливаем параметр
page по которому в дальшейшем определяем на какой странице мы находимся.
Определяем мы это в файле
index.php
$arr = array();
...
switch($page){
case 'main';
include('main.php');
break;
case 'news';
include('news.php');
break;
}
...
$_SESSION['data'] = $arr;
Суть заключается в том, что подключаемые
main.php либо
news.php вытаскивают из базы однотипную информацию, заполняют массив
$arr, который в дальнейшем сохраняется в сессионной переменной.
Для чего я это сделал:
Дело в том, что данные, запрошенные из базы скриптами
main.php или
news.php, в дальнейшем используются скриптом вызываемым посредством AJAX. Назовем его
backend.php.
Т.е. таким образом я хочу избавиться от необходимости повторного обращения к базе из скрипта
backend.php, т.к. это требует дополнительных временных затрат, а время в моем случае критично.
Лучшего механизма ускорить обработку ajax запроса я пока не придуал

Но суть не в этом.
Для пущей ясности я приведу пример.
Предположим, что
main.php или
news.php запрашивают список студентов. Из базы выбираются id студента, его фамилия и имя и еще куча параметров, часть которых мне бы не хотелось передавать в AJAX запросе.
Так вот скрипту
backend.php передается id студента, по которому, он выбирает данные о нем из ранее созданной сессионной переменной
$_SESSION['data']
В общем, возможно, все это попахивает извращением, однако таково положение дел))
Теперь к самой сути проблемы.
При таком положении вещей
backend.php ВСЕГДА получает данные сгенерированные скриптом
main.php. Даже, если мы выполняли AJAX запрос со страницы news.
Эксперименты показали, что при отключении правила
Код:
|
RewriteRule ^[/]?$ index.php?page=main [QSA] |
, либо убирании строки
include('main.php');
backend.php получает "правильные" данные.
При этом не важно сколько у меня будет страниц, генерирующих однотипные данные. Загвоздка всегда будет в этом rewrite правиле и include('main.php').
Т.е. у мня такое ощущение, что при AJAX запросе каким то образом "цепляется" вышеуказанное правило и вызывается
index.php... Это мне не понятно.
В логах rewrite я вижу, что при ajax запросе просматриваются все rewrite правила и выдается запись:
Код:
|
pass through D:/<путь>/includes/backends/backend.php |
Что касается AJAX запроса - он отправляется с загруженной страницы нажатием на кнопку.
Сам запрос имеет примерно такой вид:
xmlhttp.open('POST', './includes/backends/backend.php', true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send('action=add_student&id=324');
reqTimeout = setTimeout("xmlhttp.abort();", 5000);
Может ли кто-нибудь объяснить мне в чем причина такого поведения?
Заранее благодарен.