AJAX && mod_rewrite

it-master

Новичок
AJAX && mod_rewrite

добрый день,

использую библиотеку JsHttpRequest c dklab.ru.

при req.open(null, 'script.php', true) - все работает нормально, если же в директории установлен .htaccess для генерации ЧПУ ссылок:
Код:
RewriteEngine On
RewriteRule ^(.*)$ engine.php?$1 [L]
RewriteRule /^(.*)$ engine.php?$1 [L]
то в этом случае req.open(null, '/ajax/script/', true) - не работает и постоянно выдает ошибку JS:
Исключение брошено и не поймано

Вопрос: Влияет ли как то RewriteRule на работу AJAX, а именно в библиотеке JsHttpRequest?
 

BRat

o_0
it-master
а какая по твоему клиенту разница, что запрашивать с сервера? Или тебе кажется, что сервер без мод_реврайта отдает одни заголовки, а с - совсем другие?

Ищи в коде самой библиотеки, где генерируется это "не пойманное" исключение, и смотри, что там не так
 

it-master

Новичок
Или тебе кажется, что сервер без мод_реврайта отдает одни заголовки, а с - совсем другие?
что-то вроде этого меня настораживает или это маловероятно?

Ищи в коде самой библиотеки, где генерируется это "не пойманное" исключение, и смотри, что там не так
сам код библиотеки работоспособный и причин его дергать тут нет.
 

BRat

o_0
it-master
так, давай ты сначала посмотришь код, найдешь это исключение, а потом уже можно будет продолжить.
 

it-master

Новичок
вот этот кусок кода:
Код:
    JsHttpRequest.dataReady = function(id, text, js) {
        var undef;
        var th = PENDING[id];
        delete PENDING[id];
        if (th) {
            delete th._xmlReq;
            if (th.caching && th.hash) CACHE[th.hash] = [text, js];
            th._dataReady(text, js);
        } else if (th !== false) {
            throw "JsHttpRequest.dataReady(): unknown pending id: " + id;
        }
    }
ошибка возникает на строке с "throw"
 

akxxiv

Новичок
Скорее всего запрос просто не находит файла, т.к. модреврайт перенаправляет его. Положите в папку /ajax/script/ .htaccess с директивой выключающей модреврайт
 

it-master

Новичок
Автор оригинала: akxxiv
Скорее всего запрос просто не находит файла, т.к. модреврайт перенаправляет его. Положите в папку /ajax/script/ .htaccess с директивой выключающей модреврайт
дело в том, что при обычном наборе в строке адреса http://server/ajax/script/ страница открывается, а вот через библиотеку какие-то проблемы.
 

BRat

o_0
it-master
найди эту строчку -
this._xmlReq.open(method, url, a.asyncFlag, a.username, a.password);
и перед ней поставь alert(url), а потом попробуй этот url запросить через браузер
 

it-master

Новичок
BRat

получил вот такой адрес:
/ajax/script/?PHPSESSID=xxxx&JsHttpRequest=11656609647960-xml
 

it-master

Новичок
BRat

Код:
Array
(
    [engine_php] => 
    [PHPSESSID] => oe7787a6e0itqat5tvjncnohf2
    [JsHttpRequest] => 1165663559703631-xml
)
 

BRat

o_0
it-master
так, извини, не туда полез -
print_r($_SERVER['QUERY_STRING']);
вот это нужно было
 

BRat

o_0
it-master
А теперь проблема - в библиотеке Котерова, для парсинга передаваемых параметров используется не массив $_GET, а $_SERVER['QUERY_STRING']. Не знаю, зачем это было сделано. Но получается что скрипт не принимает никаких параметров от клиента, и определяет id запроса не как 1165663559703631, а как 0. Соответсвенно js-скрипту передаётся именно такой id, а не тот который он ожидает, отсюда и ошибка
PHP:
(preg_match('/^(.*)(?:&|^)JsHttpRequest=(\d+)-([^&]+)((?:&|$).*)$/s', $_SERVER['QUERY_STRING'], $m))
Найди эту строчку, и поменяй ее на использование массива $_GET, проблема исчезнет
 
Сверху