Callback condițional bazat pe răspunsul Ajax nu funcționează
Încerc să rulez o cerere Ajax pentru a trimite niște date către o funcție pe care am scris-o. Returnez răspunsul și încerc să rulez niște cod JavaScript bazat pe acest răspuns, dar nu pare să funcționeze corect. Indiferent de ce răspuns primesc înapoi, codul rulează mereu ca și cum răspunsul nu ar fi fost '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="Mesaj de validare" title="Cheie API validă"> 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="Mesaj de eroare" title="Eroare la cheia API"> Error: '+validation_response+'.')
.css("color", "red").fadeIn();
});
};
},
error: function(response) {
alert('A apărut o eroare la procesarea cererii tale...');
}
});
Primesc un răspuns înapoi de la cererea Ajax, și acesta spune 'Everything's Chimpy!', dar condiționalul meu nu rulează. Indiferent de ce, funcția success rulează al doilea condițional. Dar am testat răspunsul și pot vedea că se potrivește cu prima mea condiție.
De ce nu rulează prima condiție?
Partea cea mai ciudată este că am dezvoltat acest cod pe o instalație localhost. Când l-am transferat pe site-ul live, această cerere Ajax și callback-ul de success nu funcționează așa cum o făceau pe localhost. Nu-mi pot da seama de un motiv pentru care s-ar comporta diferit pe localhost față de site-ul live.
Acesta este răspunsul care se întoarce: Error: Everything's Chimpy!.

Un motiv ar putea fi că cererea AJAX prin jQuery are implicit async: true
, iar răspunsul vine prea târziu (localhost-ul este adesea mai rapid). Încearcă async: false
. Asta a rezolvat problema cel puțin într-un caz similar pentru mine recent.
Un alt detaliu important: codul de stare HTTP al răspunsului tău ar trebui să fie 200. Deci, în callback-ul tău, adaugă această linie la început, înainte de a trimite orice output:
status_header( 200 );
