AJAX 404 с результатами с использованием BuddyPress

На моей машине разработки все работает нормально. На рабочем сервере (Godaddy) запросы AJAX от BuddyPress возвращают результаты и ошибку 404 в FireBug. Но скрипт видит результаты как провал и индикаторы продолжают крутиться.

Пример: http://jobaru.com/ на главной странице есть Новейшие | Активный | Популярен среди участников, использующих AJAX, а также буквы на странице группы.

Вещи, которые я пробовал: Дважды проверил, что файл действительно был там, проверил разрешения, чтобы иметь возможность читать. Сделал новую установку.

Любые идеи о том, почему он вернет заголовок 404 и действительный ответ?


person joelpittet    schedule 04.06.2009    source источник


Ответы (8)


Я не знаю, почему он возвращает 404, но попробуйте добавить эту строку кода в /wp-content/plugins/buddypress/bp-core/bp-core-ajax-handler.php перед do_action().

status_header( 200 );

Я запускаю сильно модифицированную версию BuddyPress 1.0 RC1 и перехватываю сообщения ajax в bp-custom.php, но установка заголовка состояния в пользовательском файле до того, как я применил свою собственную логику, отлично сработала для меня.

person postpostmodern    schedule 05.06.2009

Вместо того, чтобы взламывать ядро ​​Buddypress, которое будет тормозить при следующем обновлении, вы должны добавить функцию для перехвата запрошенного действия:

Моя проблема заключалась в том, что внутри пользовательского URL-адреса группы в цикле активности «дополнительная ссылка» получала ошибку заголовка ответа 404 на admin-ajax.php. Если я проверю содержимое ответа, все данные об активности были там. Так что я не уверен, что вызывает проблему.

Чтобы решить эту проблему, я добавил функцию, которая будет возвращать заголовок состояния 200 при запуске вызова ajax. В моем случае мне нужно было действие "get_older_updates", но я полагаю, вы можете использовать его для любого другого действия, определенного в /bp-themes/bp-default/_inc/ajax.php:27.

add_action( 'wp_ajax_activity_get_older_updates', 'bp_dtheme_activity_template_loader2' );
add_action( 'wp_ajax_nopriv_activity_get_older_updates', 'bp_dtheme_activity_template_loader2' );

function bp_dtheme_activity_template_loader2(){
    if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'activity_get_older_updates')
    {
        status_header( 200 );
    }
}   
person chifliiiii    schedule 22.02.2013

Похоже, это что-то с GoDaddy, судя по вашим комментариям. Пока вы не получите ответ от их поддержки, я бы изменил сценарий AJAX, чтобы игнорировать ошибку 404 для этого конкретного запроса.

person James Skidmore    schedule 04.06.2009

У меня была эта проблема на GoDaddy, и она сводила меня с ума, но я нашел решение. Отправка кода состояния 200 (header("HTTP/1.1 200 OK");) не избавила меня от ошибки 404. У меня было правило mod_rewrite, которое направляло стандартный URL-адрес в мой index.php, поэтому такой URL-адрес:

www.example.com/myroute/ajax_get_current

Был отправлен в мое приложение по существу следующим образом:

www.example.com/index.php/myroute/ajax_get_current

Довольно стандартные вещи. Проблема возникла, когда я создал файл в корне документа с тем же именем, что и мой маршрут:

DOCROOT/myroute.php

Тогда я получу точно такой же результат, как описано — ошибка 404, но правильный ответ. Я подтвердил, что если я изменю файл на «myroute_cron.php», 404 исчезнет (правильный 200), а если я верну его обратно, он даст 404.

Я понятия не имею, почему это происходит (тем более, что он явно выполнял правильный скрипт для получения правильного ответа), возможно, что-то с MultiViews. Надеюсь это поможет.

person Dan Rahmel    schedule 06.07.2012

Я смотрю на ответ AJAX, и похоже, что вместо чистого HTML, который он возвращает, он имеет это в начале: 0[[SPLIT]] и ноль в конце. Может ли это иметь какое-то отношение к этому?

person James Skidmore    schedule 04.06.2009
comment
0[[SPLIT]] на самом деле является положительным ответом в BuddyPress, а -1[[SPLIT]] — отрицательным ответом. - person joelpittet; 04.06.2009

убедитесь, что вы уже добавили обработчик ошибок для сбоя ajax (ошибка)? попробуйте сначала скрыть индикатор вращения, чтобы увидеть эффект.

person nonopolarity    schedule 04.06.2009
comment
Кажется, он справляется с ошибкой AJAX, странно то, что ответ проходит нормально, но он отправляет заголовок 404, который сбивает с толку сценарий ajax. 2 других сообщили об этом на Godaddy без каких-либо успешных результатов. У меня есть запрос на поддержку, но я думаю, что вы, ребята, можете быть более полезными. - person joelpittet; 04.06.2009

FWIW, я видел точно такую ​​​​же проблему с ответами в формате JSON как часть плагина WordPress при размещении на GoDaddy.com. Результаты JSON отправляются правильно, но ответ HTTP имеет код состояния 404.

Я вполне убежден, что это проблема с их заголовком/конфигурацией Apache, и я попытаюсь связаться с их командой технической поддержки (пожелайте мне удачи), чтобы разобраться в этом.

Я напишу здесь, если получу ответ от них.

person Jason Buberel    schedule 19.12.2009
comment
Проблема также была решена путем добавления вызова функции status_header( 200 ) при выполнении AJAX-запроса: if($_GET['ajax']){ status_header( 200 ); ... } - person Jason Buberel; 20.12.2009

Я получал ошибку ответа 404 во время игры с раскрывающимся меню города страны с использованием AJAX, и проблема заключалась в следующем.

<select name="lm_country" id="lm_coutry" 
    onChange="getCity('getcities.php?country='+this.value)">

Затем я дал полный URL-адрес, указанный ниже;

<select name="lm_country" id="lm_coutry" 
    onChange="getCity('http://localhost/civic/includes/getcities.php?country='+this.value)">
person Community    schedule 10.08.2010