Callback condițional bazat pe răspunsul Ajax nu funcționează

20 feb. 2014, 20:48:16
Vizualizări: 15.5K
Voturi: 1

Î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!.

3
Comentarii

cum arată codul PHP care returnează valoarea? ești sigur că nu există un newline sau ceva asemănător acolo?

Milo Milo
20 feb. 2014 21:14:27

Este obișnuit să adaugi soluția ca răspuns, nu la întrebarea ta - poți face asta, te rog.

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

ups, scuze pentru asta. Nu am intenționat să o pun sub întrebarea mea inițială.

EHerman EHerman
20 feb. 2014 22:40:46
Toate răspunsurile la întrebare 3
1

Salvează-ți efortul și examinează funcțiile wp_send_json_success() și wp_send_json_error() în schimb. Aceste funcții îți permit să trimiți date înapoi din PHP și să trimită automat valori de succes pentru ca codul JavaScript să le examineze.

20 feb. 2014 21:25:55
Comentarii

Mulțumesc, Otto. Am reușit de fapt să obțin asta folosind: if(response.indexOf('Everything\'s Chimpy!') > -1) {. Poate voi reveni și voi implementa sugestia ta.

EHerman EHerman
20 feb. 2014 22:23:46
0

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 );
20 feb. 2014 21:18:09
0

Am ales în final să folosesc:

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

    } else {

    }

și funcționează perfect. Mulțumesc pentru răspunsuri!

20 feb. 2014 22:41:21