Bonjour,

Voila je créé un système de relance semi-automatique par email. J'envoie une requête AJAX, qui envoie les mails dans une boucle, et retourne les erreurs ou la confirmation. Le problème c'est que mon message de confirmation final est vu comme une erreur.

Le PHP

Décrivez ici votre code ou ce que vous cherchez à faire

    public function relanceAction(){
        $model = new ContactModel;
        if( $this->_request->get('ajax') !== 'true' ){
            header('Location: '.DOMAIN);
        }
        $logged = unserialize($_SESSION[APP_TAG]['logged']);
        $login = $this->_request->post('login');
        $country = $this->_request->post('country');
        $subject = $this->_request->post('subject');
        if( $subject == '' ){
            header( '500 Internal Server Error', true, 500 );
            die('Vous devez spécifier le sujet du mail.');
        }
        $message = $this->_request->post('message');
        if( $message == '' ){
            header( '500 Internal Server Error', true, 500 );
            die('Vous devez écrire un message.');
        }
        $datas = $model->getlistrelance( $login, $country );
        $nb_mail_sent = 0;
        $list_number = count($datas);

        foreach ($datas as $key => $value) {
            if( date_interval_6_days( $value['last_mail'], date( 'Y-m-d H:i:s' ) ) ){ //Si il y a plus de 6 jours d'écart de relance pour ce contact
                //***********************************************************************************
                //**************************** ENVOI DU MAIL AU PROSPECT ****************************
                //***********************************************************************************
                $mail = new PHPMailer;
                $mail->CharSet = 'UTF-8';
                $mail->isMail();
                $mail->isHTML(true);
                $mail->setFrom( NOREPLY_MAIL, APP_TAG ); //Envoyé par 
                $mail->addReplyTo( $logged['mail'], strtoupper($logged['nom']).' '.$logged['prenom'] ); //Adresse de réponse
                $mail->Sender = NOREPLY_MAIL;
                $mail->addAddress( $value['mail'] );
                $mail->Subject = $subject;
                $mail->Body = $message;
                $mail->AltBody = 'Version Texte : ' . html_to_txt( $mail->Body );
                $mail->send();
                //***********************************************************************************
                //***************************** MISE A JOUR DES STATS *******************************
                //***********************************************************************************
                $datas = $value;
                $datas['nb_relance'] = $value['nb_relance'] + 1;
                $datas['last_mail'] = date('Y-m-d H:i:s');
                $model->update( $datas );
                $nb_mail_sent++;
                sleep(1);
            }
        }
        $message = $nb_mail_sent.'/'.$list_number.' contact';
        if( count($nb_mail_sent) > 1) $message .= 's';
        $message .= ' relancé';        
        if( count($nb_mail_sent) > 1) $message .= 's';
        echo $message;
    }

Le jQuery

//Envoie relance
    $('#contact-relance').on('submit', function(e){
        e.preventDefault();
        var mask = $( '#boxmask' );
        var content = $('#box-content');
        var formDatas = $(this).serialize();
        lightbox('Envoi en cours...<br/><img src="assets/img/lightbox/loader.gif" id="boximg" alt="loader"/>');
        $.ajax({
            url       : 'index.php?c=Contact&a=relance&ajax=true',
            type      : 'POST',
            data      : formDatas,  
            dataType  : 'JSON'         
        })
        .done(function(data, text, jqxhr){
            content.html('Envoi terminé !<br/><img src="assets/img/lightbox/confirm.png" id="boximg" alt="confirm"/><br/>'+jqxhr.responseText );
        })
        .fail(function(jqxhr){              
            content.html( '<span style="color: red;"><b>Erreur :</b></span><br/>'+jqxhr.responseText );
        });
    });

Le problème

Le problème c'est que mon message final à la fin quand tout s'est bien déroulé, passe dans la condition fail() de la requête Ajax, et s'affiche donc en rouge comme une erreur. J'ai essayé de mettre un header 200 avec un die et c'est pareil ça passe quand même en fail(). Pourtant la requête retourne bien un code 200 dans le debogueur.

Si vous avez une idée je suis preneur :)

2 réponses


jeanMat
Réponse acceptée

Salut,

C'est possible que celà vienne du fait que tu attendes un retour au format JSON et que ton PHP te renvoie autre chose qu'un JSON valide.

Ton PHP s'exécute correctement, mais le retour n'est pas au format attendu par l'objet $.ajax.

RiderFx3
Auteur

Salut,

Effectivement j'ai viré la ligne dataType : 'JSON' dans mon $.ajax et ça fonctionne.
Merci bien !