Solución: Callback condicional basado en respuesta Ajax no funciona
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!.

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 );
