Appel d'un script php en ajax ou javascript

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir,

j'aimerais pouvoir appeler un script php sans devoirs recharger la page.

Se que j'aimerais faire:

  • Un script php qui envoie un mail pour une newsletter.
  • Problème: J'aimerais que tout les e-mails ne s'envoie pas en une fois, pour éviter un request Time out.
  • Donc j'aimerais appeler une page php toute les X milliseconde qui envoie UN e-mail.

Et si possible, afficher l'avancement en direct sur la page d'ou on appel le script php. (Ex: 123/25938 mail envoyés)

En vous remerciant. WinXaito

Édité par WinXaito

+0 -0
Staff

Oui, tu peux le faire en ajax. Avec JQuery c'est même très simple :

  • d'abord tu obtiens le nombre de mails à envoyer avec un $.get('url_vers_nombre_de_destinataire.php');
  • ensuite tu fais un simple setInterval qui fait bêtement
1
2
3
4
if(index_courant < nombre_total){
    $.post('url_vers_envoie_mail.php',{'index':index_courant,'message':corps_du_mail})
    index_courant++;
}

voilà

+1 -0
Staff

Mauvaise idée le setInterval sur de l'asynchrone : mieux vaut relancer la requête une fois la précédente terminée ;)

Sinon, question bête, mais pour de l'envoi de mails tu peux pas mettre en place une simple file d'attente, que tu traites via un cron ? Sinon il existe des APIs qui se chargent de ça (la plupart sont gratuites en-dessous d'un certain volume) : Mailjet (français), MailChimp (australien)…

Auteur du sujet

Bonsoir,

alors actuellement, j'ai fais quelque chose comme ça:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(e){
        $.ajax ({
            url : 'page.php',
            type : 'GET',
            dataType : 'html',
            success : function(code_html, statut){
                alert("Chargement réussi " + statut + " " + code_html);
            },
            error : function(resultat, statut, erreur){
                alert("Erreur");
            }
        });
    });
</script>
<?php echo 'Index';?>

Comment faire pour appeler cette fonction un certain nombre de fois et une fois le complete effectué.

Merci

+0 -0
Auteur du sujet

Bonjour, merci de vos réponse !

j'ai par contre un petit problème, bon c'est plus liés à du Javascript général, mais comme ça a quand même un rapport avec mon projet, je me permet de poster ici.

Mon code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
function search(){
        var variable = false; 
        $.ajax({
            url : 'page.php',
            type : 'GET',
            data : 'search=true',
            dataType : 'html',
            success : function(code_html, statut){
                if(code_html == 'true'){
                    variable = true;
                    alert("var:" + variable);
                }
                else{
                    variable = false;
                    alert("problem");
                }
            }
        });
        alert("var2:" + variable);
        return variable;
    }

mon problème, variable vaut false au return. Alors qu'elle vaut bien true dans le if. Je ne comprend vraiment pas pourquoi, … (Sachant bien sur que alert("problem"); n'apparait pas.

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Eh bien il suffit de faire ton traitement une fois la requête terminée, donc dans la fonction de success.

En gros :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
function search(){
        var variable = false; 
        $.ajax({
            url : 'page.php',
            type : 'GET',
            data : 'search=true',
            dataType : 'html',
            success : function(code_html, statut){
                console.dir(code_html);
                if(code_html == 'true'){
                    alert("OK");
                    // Ton traitement ici
                }
                else{
                    variable = false;
                    alert("problem");
                }
            }
        });
    }
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte