Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с AJAX запросом + mod_rewrite 
:(
    Опции темы
BrokenEye
Дата 9.7.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.7.2009

Репутация: нет
Всего: нет



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



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

Столкнулся с некоторой проблемой, суть которой я попытаюсь тут изложить.
В результате экспериментов я пришел к выводу, что проблема, вероятно, кроется в mod_rewrite и отсылке запроса посредством AJAX. Однако в чем конкретно заковырка я так и не понял.

Да, знание механизмов работы mod_rewrite и ajax у меня находится не на самом высоком уровне и, уверен, некоторые детали для меня являются упущенными, тем не менее я питаю скромную надежду на устранение этих пробелов и решение моей проблемы smile

Итак собственно перехожу к сути вопроса.

Имеются следующие 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 запроса я пока не придуал smile Но суть не в этом.

Для пущей ясности я приведу пример.
Предположим, что 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... Это мне не понятно. smile

В логах rewrite я вижу, что при ajax запросе просматриваются все rewrite правила и выдается запись:
Код

pass through D:/<путь>/includes/backends/backend.php



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

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

Это сообщение отредактировал(а) BrokenEye - 10.7.2009, 04:55
PM MAIL   Вверх
Photon
Дата 11.7.2009, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: нет
Всего: 12



А не проще направлять AJAX-запрос сразу файлу index.php и там обрабатывать?

З.Ы.   И откуда нам знать, как ты посылаешь запрос? Может это вполне логичная работа mod_rewrite

Это сообщение отредактировал(а) Photon - 11.7.2009, 03:53


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
BrokenEye
Дата 11.7.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.7.2009

Репутация: нет
Всего: нет



Цитата(Photon @ 11.7.2009,  03:52)
А не проще направлять AJAX-запрос сразу файлу index.php и там обрабатывать?

З.Ы.   И откуда нам знать, как ты посылаешь запрос? Может это вполне логичная работа mod_rewrite

Не знаю правильно ли я тебя понял, но отправляя запрос в index.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);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.