Условный колбэк success на основе Ajax Response не работает
Я пытаюсь выполнить ajax-запрос для передачи данных в написанную мной функцию. Я возвращаю ответ и пытаюсь запустить некоторый javascript на основе этого ответа, но он не работает должным образом. Независимо от того, какой ответ приходит, он всегда выполняется так, как если бы ответ не был равен 'Everything's Chimpy!'
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {
action: 'chimp_form',
form_action: 'validate_api_key',
api_key: apiKey,
data_center: dataCenter
},
success: function(validation_response) {
// alert(validation_response);
if(validation_response == "Everything's Chimpy!") {
jQuery('.mailChimp_api_key_preloader')
.fadeOut('fast', function() {
jQuery('.mailChimp_api_key_validation_message')
.html('<img src="/images/mc-checkmark.png" alt="Сообщение об успехе" title="Успешная проверка API ключа"> Valid API Key')
.css("color", "green").fadeIn();
});
} else {
// alert(response);
jQuery('.mailChimp_api_key_preloader')
.fadeOut('fast', function() {
jQuery('.mailChimp_api_key_validation_message')
.html('<img src="/images/yikes-mc-error-icon.png" alt="Сообщение об ошибке" title="Ошибка проверки API ключа"> Error: '+validation_response+'.')
.css("color", "red").fadeIn();
});
};
},
error: function(response) {
alert('Произошла ошибка при обработке вашего запроса...');
}
});
Я получаю ответ от ajax-запроса, и он говорит 'Everything's Chimpy!', но мое условие не срабатывает. Независимо от ответа, функция success всегда выполняет второе условие. Но я проверил ответ и вижу, что он соответствует моему первому условию.
Почему не выполняется первое условие?
Самое странное... Я разрабатывал это на локальном сервере. Когда я перенес код на рабочий сайт, этот ajax-запрос и колбэк success перестали работать так, как на локальном сервере. Я не могу понять причину, почему поведение отличается между локальным и рабочим сервером.
Вот ответ, который приходит: Error: Everything's Chimpy!.

Одной из причин может быть то, что AJAX-запрос через jQuery по умолчанию использует async: true
, и ответ приходит слишком поздно (локальный сервер часто работает быстрее). Попробуйте async: false
. Это помогло решить похожую проблему в моем недавнем случае.
Еще один важный момент: HTTP-код статуса вашего ответа должен быть 200. Поэтому в вашем обработчике добавьте эту строку в самом начале, перед отправкой любого вывода:
status_header( 200 );
