Я отправляю некоторые данные в сценарий PHP через jQuery AJAX, и все работает правильно, но возвращает ошибку 404. В моей консоли Firebug ответ сценария PHP правильный. Я не понимаю, как сценарий может реагировать, но он все еще выдает ошибку 404. Метод обратного вызова jQuery «error» срабатывает, а метод «success» - нет.
Все операторы, выполняемые сценарием PHP, работают точно, потому что я вижу, что база данных обновляется и т. Д.
Я использую jQuery 1.4.2 на WordPress 3. x, размещенный на Dreamhost.
----------- ПОДРОБНЕЕ -----------
Хорошо, я понял это, когда включил WordPress wp-blog-header.php
в скрипте Ajax, я получаю сообщение об ошибке. Кроме того, когда-то эти скрипты работали, и я на 90% уверен, что они перестали работать после обновления WP 3.0. Я вставлю заголовки ответа от Firebug.
Этот ответ заголовка от PHP, который включает wp-blog-header.php и возвращает ошибку 404 в Firebug ...
Date Tue, 10 Aug 2010 01:44:44 GMT
Server Apache
X-Powered-By PHP/5.2.6
X-Pingback http://www.learnwake.com/xmlrpc.php
Expires Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control no-cache, must-revalidate, max-age=0
Pragma no-cache
Last-Modified Tue, 10 Aug 2010 01:44:44 GMT
Vary Accept-Encoding
Content-Encoding gzip
Content-Length 36
Keep-Alive timeout=2, max=98
Connection Keep-Alive
Content-Type text/html; charset=UTF-8
Этот ответ заголовка от PHP, который не ' t включает wp-blog-header.php и возвращает 200 OK в Firebug ...
Date Tue, 10 Aug 2010 01:44:58 GMT
Server Apache
X-Powered-By PHP/5.2.6
Vary Accept-Encoding
Content-Encoding gzip
Content-Length 36
Keep-Alive timeout=2, max=100
Connection Keep-Alive
Content-Type text/html
Когда вы включаете wp-blog-header.php
, вы завершаете загрузку всей процедуры установки WordPress. Вызывается функция wp ()
, которая вызывает $ wp-> main ()
, которая, в свою очередь, вызывает различные функции настройки.
Один из них - $ wp-> query_posts ()
, который вызывает $ wp_the_query-> query ()
, который, в свою очередь, вызывает WP_Query
функция parse_query ()
. Я подозреваю , что там генерируется индикация 404 (ваша страница AJAX не является постом WP или чем-то подобным), а затем $ wp- преобразовывает в настоящий заголовок ответа 404. > handle_404 ()
, функция, вызываемая после query_posts ()
в main ()
.
Я не уверен на 100%, что parse_query ()
является явным виновником, но я бы посоветовал посмотреть, можете ли вы вместо этого просто включить wp-load.php
, поскольку я верю, что он выполняет фактическую работу по созданию объектов, к которым вы хотите получить доступ.
Опять же, я на самом деле не использую WordPress, поэтому я не могу быть уверен, но, глядя на исходный код, это кажется наиболее вероятным из того, что я могу сказать.
Я однажды добавил файл ajax.php
в шаблон WordPress и столкнулся с этой проблемой.
Я решил это, просто добавив вверху ajax.php
header('Response: HTTP/1.1 200 OK');
Вроде хака, но это сработало.
В целом не так уж много мест, где WordPress будет возвращать ошибку 404. Я рекомендую для этих мест выполнить поиск дерева исходных текстов и разместить отладочный код, чтобы отследить, почему это происходит.