Solución: Callback condicional basado en respuesta Ajax no funciona

20 feb 2014, 20:48:16
Vistas: 15.5K
Votos: 1

Estoy intentando ejecutar una solicitud AJAX para pasar algunos datos a una función que he escrito. Devuelvo la respuesta e intento ejecutar algún código JavaScript basado en la respuesta, pero no parece estar funcionando correctamente. Independientemente de cuál sea la respuesta, siempre la ejecuta como si la respuesta no fuera '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="Mensaje de validación" title="Clave API válida"> 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="Mensaje de error" title="Error en validación"> Error: '+validation_response+'.')
                        .css("color", "red").fadeIn();
                });                             
        };
    },
    error: function(response) {
        alert('Hubo un error procesando tu solicitud...'); 
    }
});

Estoy obteniendo una respuesta de la solicitud AJAX que dice 'Everything's Chimpy!', pero mi condición no se ejecuta. No importa qué, la función success siempre ejecuta la segunda condición. He probado la respuesta y puedo ver que coincide con mi primera declaración condicional.

¿Por qué no se ejecuta la primera condición?

La parte más extraña es que desarrollé esto en una instalación local. Cuando lo transferí a mi sitio en vivo, esta solicitud AJAX y el callback de éxito no funcionan como lo hacían en localhost. No encuentro razón por la que actuaría diferente en localhost que en el sitio en vivo.

Esta es la respuesta que está llegando: Error: Everything's Chimpy!.

3
Comentarios

¿Cómo se ve el código PHP que devuelve el valor? ¿Estás seguro de que no hay un salto de línea o algo similar ahí?

Milo Milo
20 feb 2014 21:14:27

Es costumbre agregar la solución como respuesta, no a tu pregunta - ¿puedes hacer esto por favor?

Nicolai Grossherr Nicolai Grossherr
20 feb 2014 22:27:42

Ups, lo siento por eso. No fue mi intención colocarlo debajo de mi pregunta original.

EHerman EHerman
20 feb 2014 22:40:46
Todas las respuestas a la pregunta 3
1

Ahorra algo de esfuerzo y examina las funciones wp_send_json_success() y wp_send_json_error() en su lugar. Estas te permitirán enviar datos desde PHP y automáticamente enviarán valores de éxito para que el código javascript los examine.

20 feb 2014 21:25:55
Comentarios

Gracias Otto. En realidad pude lograrlo usando: if(response.indexOf('Everything\'s Chimpy!') > -1) {. Tal vez vuelva más tarde e implemente lo que has sugerido.

EHerman EHerman
20 feb 2014 22:23:46
0

Una razón podría ser que la solicitud AJAX mediante jQuery por defecto usa async: true, y la respuesta llega demasiado tarde (localhost suele ser más rápido). Prueba con async: false. Eso resolvió al menos un caso similar para mí recientemente.

Otro detalle importante: el código de estado HTTP de tu respuesta debería ser 200. Así que en tu callback, agrega esta línea al principio, antes de enviar cualquier salida:

status_header( 200 );
20 feb 2014 21:18:09
0

Al final terminé usando:

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

    } else {

    }

y funciona de maravilla. ¡Gracias por las respuestas!

20 feb 2014 22:41:21