Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.07.2009, 15:27
Новичок на форуме
Отправить личное сообщение для BrokenEye Посмотреть профиль Найти все сообщения от BrokenEye
 
Регистрация: 13.11.2008
Сообщений: 1

Проблема с AJAX запросом + mod_rewrite
*понимаю, что понаписал много, но по другому, мне кажется, будет не понятна суть проблемы



Всем доброго времени суток

Столкнулся с некоторой проблемой, суть которой я попытаюсь тут изложить.
В результате экспериментов я пришел к выводу, что проблема, вероятно, кроется в 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);




Может ли кто-нибудь объяснить мне в чем причина такого поведения?

Заранее благодарен.

Последний раз редактировалось BrokenEye, 11.07.2009 в 16:54.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2009, 02:08
Интересующийся
Отправить личное сообщение для Photon Посмотреть профиль Найти все сообщения от Photon
 
Регистрация: 05.05.2009
Сообщений: 19

Я бы обрабатывал AJAX-запрос в index.php и не мучал себе голову..
Неужели сложно добавить одну переменную в запрос, при наличии которой подключается этот самый backend.php и выполняет нужные действия

Последний раз редактировалось Photon, 12.07.2009 в 02:13.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12
Проблема с Ajax запросом в IE и Opera flash_uz AJAX и COMET 0 30.04.2009 15:08
Проблема с двумя запросами human AJAX и COMET 11 11.03.2009 13:37
Проблема с обработкой селектов html кода, пришедшего через ajax запрос Rage jQuery 6 26.01.2009 14:15