Callback di successo condizionale basato sulla risposta Ajax non funziona
Sto cercando di eseguire una richiesta ajax per passare alcuni dati a una funzione che ho scritto. Restituisco la risposta e provo a eseguire del codice javascript basato sulla risposta, ma sembra non funzionare correttamente. Indipendentemente dalla risposta ricevuta, viene sempre eseguito come se la risposta non fosse '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="Messaggio di successo" title="Chiave API valida"> 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="Messaggio di errore" title="Errore chiave API"> Error: '+validation_response+'.')
.css("color", "red").fadeIn();
});
};
},
error: function(response) {
alert('Si è verificato un errore durante l\'elaborazione della richiesta...');
}
});
Sto ricevendo una risposta dalla richiesta ajax che dice 'Everything's Chimpy!', ma la mia condizione non viene eseguita. Indipendentemente dalla risposta, la funzione success esegue sempre il secondo blocco condizionale. Ho testato la risposta e posso verificare che corrisponde alla mia prima condizione.
Perché non viene eseguito il primo blocco?
La parte più strana è che... ho sviluppato questo codice su un'installazione localhost. Quando l'ho trasferito sul sito live, questa richiesta ajax e il callback di successo non funzionano come su localhost. Non riesco a trovare una ragione per cui dovrebbe comportarsi diversamente su localhost rispetto al sito live.
Questa è la risposta che viene restituita: Error: Everything's Chimpy!.

Una ragione potrebbe essere che la richiesta AJAX tramite jQuery per impostazione predefinita utilizza async: true
, e la risposta arriva troppo tardi (localhost è spesso più veloce). Prova con async: false
. Questo ha risolto il problema almeno in un caso simile che ho affrontato di recente.
Un altro dettaglio importante: il codice di stato HTTP della tua risposta dovrebbe essere 200. Quindi nella tua callback, aggiungi questa riga all'inizio, prima di inviare qualsiasi output:
status_header( 200 );
