Условный колбэк success на основе Ajax Response не работает

20 февр. 2014 г., 20:48:16
Просмотры: 15.5K
Голосов: 1

Я пытаюсь выполнить 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!.

3
Комментарии

как выглядит PHP-код, который возвращает значение? вы уверены, что там нет перевода строки или чего-то подобного?

Milo Milo
20 февр. 2014 г. 21:14:27

Принято добавлять решение в качестве ответа, а не в вопрос — не могли бы вы сделать это, пожалуйста.

Nicolai Grossherr Nicolai Grossherr
20 февр. 2014 г. 22:27:42

упс, извините за это. Я не планировал размещать это под своим оригинальным вопросом.

EHerman EHerman
20 февр. 2014 г. 22:40:46
Все ответы на вопрос 3
1

Сэкономьте свои усилия и изучите функции wp_send_json_success() и wp_send_json_error() вместо этого. Они позволяют отправлять данные обратно из PHP и автоматически передают значения успеха/ошибки для последующей проверки в JavaScript-коде.

20 февр. 2014 г. 21:25:55
Комментарии

Спасибо, Отто. Мне удалось добиться этого с помощью: if(response.indexOf('Everything\'s Chimpy!') > -1) {. Возможно, позже я вернусь и реализую то, что вы предложили.

EHerman EHerman
20 февр. 2014 г. 22:23:46
0

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

Еще один важный момент: HTTP-код статуса вашего ответа должен быть 200. Поэтому в вашем обработчике добавьте эту строку в самом начале, перед отправкой любого вывода:

status_header( 200 );
20 февр. 2014 г. 21:18:09
0

В итоге я выбрал:

 if(response.indexOf('Everything\'s Chimpy!') > -1) {

    } else {

    }

и это работает отлично. Спасибо за ответы!

20 февр. 2014 г. 22:41:21