Проблема локализовалась (но тем не легче). Оказывается, обычный (не-ajax) post-запрос тоже не отрабатывает. Точнее отрабатывает, если ничего не пересылается (пустая форма, форма без инпутов). Стоит добавить хотя бы один инпут и после перехода на страницу, указанную в action формы, вижу «An Error Was Encountered».
Логи покажите, что выдает?
Так же обычно CodeIgniter настроен на отсечение GET запросов наоборот.
URI я бы с корнем писал — '/registration/check'
А $.post в JQuery имеет действительно формат, что во втором параметре не строка, а объект.
А такое что выдает?
да и post cо строкой, например, 's', нормально передается. Ошибка появляется, когда именно "=" прописывается. Амперсанд и прочие символы нормально воспринимаются
странное дело, но результата от смены конфига нет, в логи ничего не пишется, только стандартная страница-заглушка с ошибкой. С jQuery я знаком неплохо, так что там ошибок нет, это точно. Представленный код с передаваемой строкой был просто как пример, до которого я уже перебробовал и $.ajax(), и $.post(), и $.get(), и передавать с ними как объекты, так и строки.
Еще одна идея: некоторые фреймворки (например, symfony (насколько мне известно)), если отправлять post вместо get (или наоборот) выдает 404, а не 405 или 406. Может, в CI что-нибудь такое же?
с ci знаком пару недель, поэтому может что и упустил. Но в userguide ничего про это не было написано. Дело могло быть в Апаче (пишу на локалхосте), но оказалось, что врядли, так как пробовал и на серваках друзей.
The security filtering function is called automatically when a new controller is invoked. It does the following:
* Destroys the global GET array. Since CodeIgniter does not utilize GET strings, there is no reason to allow it.
* Destroys all global variables in the event register_globals is turned on.
* Filters the POST/COOKIE array keys, permitting only alpha-numeric (and a few other) characters.
* Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.
* Standardizes newline characters to \n
Насколько я понял, это все относится только к $this->input->post/get/cookie(). Я эту библиотеку не пользую. Вообще ничего не делаю с получаемым параметром. Уже и от ajax'а отказался, а post все равно не проходит. Проблема теперь свелась к следующему: есть форма, где в action указано 'register/check', а в методе — post. Жмём на обычный input type=«submit», браузер переходит на указанный в экшене путь, но выдает ошибку. Если поменять post на get, то все нормально.
Переустановил CodeIgniter (v2.0.0), ничего не изменилось. Самое интересное, что конфиг как будто игнорируется. Изменение $config['log_threshold'] = 4; и $config['allow_get_array'] = FALSE; ни на что не влияет.
В этом-то и проблема, что в логах ничего нет, точнее даже пустого файла с логами нет. CI переустановил, все пути сейчас стоят по умолчанию. В error-логе апача ничего подозрительного нет, в access.log'е засвидетельствованы все промахи POST-запросов:
Действительно, забыл изменить. Теперь логи ведутся (в конфиге указал высший уровень логгирования), но в них только пишутся строки «DEBUG — 2011-02-13 01:59:11 --> Hooks Class Initialized», отличающиеся только классами.
Всем спасибо за внимание, причина нашлась — в конфиге было включено $config['csrf_protection'] = true. Выяснил, пройдя по input.class и закоментив, сначала, $this->_sanitize_globals(). В коде метода была отсылка как раз на csrf. Правда теперь не понятно, как отправлять post с включенным csrf, но это уже дело наживное;)