IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

En boucle jusqu'à la fin


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut En boucle jusqu'à la fin
    Bonjour,

    J'envoie un formulaire en ajax qui fait exécuter une page PHP et ça prend quelques secondes et pour pouvoir afficher le résultat je dois attendre la fin. Alors j'aimerais faire en sorte qu'en même temps on lance une nouvelle requête ajax toute les x secondes jusqu’à ce qu'elle reçoive la réponse d’arrêter, mais je n'ai pas réussi.

    J'ai essayé ça: http://desirelabs.fr/jquery-ajax-set...rnet-explorer/, mais ça ne fonctionne pas.

    Quelqu'un sait comment faire ? Moi je pensais faire une fonction qui s'appelle elle même avec une condition t'en qu'elle reçoit pas genre "1" pour dire que c'est fini.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 419
    Par défaut
    Salut,

    C'est pas clair, pourquoi ne pas utiliser le retour de la réponse ajax comme événement "arrêter". Que veux-tu faire exactement ?

    ps : on est habitué aux fautes d'orthographe, mais le bonjour avec un "s" et le "quand même temps", ça pique un peu les yeux (je passe sur le "t'en qu'elle")

  3. #3
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Pardon pour les fautes mais j'ai toujours eu l'habitude d'écrire certains mots comme ça
    ^^.

    En gros j'éxécute une commande linux par l'intermédiaire de mon script PHP chargé depuis une requête ajax. Sauf que cette en ajax peut prendre du temps que je pourrais peut être déterminer assez précisément, mais long à faire surtout si il y a plusieurs étapes et je ne peux donc pas afficher la réponse tout de suite.

    Donc j'ai voulu faire deux requêtes ajax, la première lance la commande et la seconde lancé juste après la première vérifie si c'est finit et affiche le résultat.
    il faut donc que la seconde requête s'exécute tout les secondes sans doute 3 ou 4 fois, mais ça peut être beaucoup plus et qu'une fois qu'elle a eu la réponse elle s'arrête pour afficher le résultat.
    La réponse c'est 1 et t'en que c'est pas finit c'est 2.

    Mais pour le moment je n'y suis pas arrivé.

    EDIT:
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var timer = setInterval(function(){
    					request();
    				}, 2000);
    et dans la fonction request():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    	$.ajax({
    		url: 'ajax/test_fin_telechargement.php',
    		type: 'post',
    		timeout: 5000, // Après 5 seconde on arrête si c'est trop long
    		dataType: 'json',
    		success: function(donnees) {
    			if(donnees.telechargement == 1)
    				{
    					$("#telechargement").html('1 = ' + donnees.telechargement + ' | Statut: ' + donnees.donnees);
    					clearInterval(timer);
    				}
    			else
    				{
    					$("#telechargement").append('2 = ' + donnees.telechargement+' | Statut: ' + donnees.donnees);				
    				}
    		},
    		error: function(XMLHttpRequest,textStatus, errorThrown){
    			$("#telechargement").html('Erreur request: '+errorThrown);
    		},
    	});
    mais la fonction continue à être rappelé!!! Je le vois car pour tester j'ai mit un nombre aléatoire a chaque chargement de la page... et il change tout le temps.

    J'ai lu comme quoi ça serait une variable local et que le problème viendrait de la, je sais donc pas quoi faire.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 419
    Par défaut
    Salut,

    Sur le principe un setTimeout est plus approprié qu'un setInterval. En résumé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function requete_verif()
    {
    $.ajax({
    		url: 'ajax/test_fin_telechargement.php',
    		type: 'post',
    		timeout: 5000, // Après 5 seconde on arrête si c'est trop long
    		dataType: 'json',
    		success: function(donnees) {
    			if(donnees.telechargement == 2)
    				{
    					$("#telechargement").html('1 = ' + donnees.telechargement + ' | Statut: ' + donnees.donnees);
    					setTimeout(function(){requete_verif();},5000);
    				}
                                    else
                                    //...
    }

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Salut, Sur le principe un setTimeout est plus approprié qu'un setInterval.
    Bien entendu !

    En utilisant une écriture AJAX non obsolète, la solution (j'ai testé) est évidente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <script>
        "use strict";
     
        $( function(){ // forme abrégée de $(document).ready(function(){
     
        });
     
        $( window ).load( function(){
     
            function recommence(){ 
                var delayAbort = 5000, // 5s
                    delayRecommence = 3000, //3s
                    jqXHR = $.getJSON( "../divers/HCtest.json" ); // "ajax/test_fin_telechargement.php" );
     
                setTimeout( function(){
                    // Si l'objet différé existe dans l'état "attendre", 
                    // alors exécute la méthode fail()
     
                    if ( jqXHR && jqXHR.state() === "pending" ){
                        jqXHR.abort();
                    }
                }, delayAbort );
     
                jqXHR.done( function( data, textStatus, jqXHR ){
                    // succès de la transaction, on doit traiter le contenu de data
                    console.log( data, textStatus, jqXHR );
     
                    // code
                });
     
                jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
                    // échec de la transaction, gérer la catastrophe
                    console.log( jqXHR, textStatus, errorThrown );
     
                    // code
                });
     
                jqXHR.always( function( jqXHR, textStatus ){
                    // la transaction est terminée
                    // nettoyage
                    // exécution d'un code dépendant
                    console.log( jqXHR, textStatus );
     
                    // code
     
                    setTimeout( recommence, delayRecommence );
     
                });
            }
     
            recommence();
     
        });
    </script>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Merci pour vos réponses.

    @danielhagnoul => ton code est un peut obscure pour moi, mais bien commenté, qu'est ce que tu veux dire par "une écriture AJAX non obsolète" ?
    Pour le moment je ne sais pas comment j'ai fait(la première fois ça na pas marché), mais j'utilise la méthode de ABCIWEB qui fonctionne sans le setTimeout que je vais peut être rajouter.

    C'est le genre de truck que je trouve pas toujours évidant a faire en JS et on trouve pas toujours de bon tuto

Discussions similaires

  1. Ma boucle for ne vas pas jusqu'à la fin
    Par totoAussi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/03/2014, 12h09
  2. [VBA-E]Boucle sur semaine fin-debut d'année
    Par illight dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/01/2007, 14h40
  3. Série de points jusqu'à la fin de de la cellule
    Par Joe Le Mort dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 29/09/2006, 20h11
  4. [VBA-E]Boucle Wend sans fin ??
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 26/05/2006, 16h14
  5. boucle jusqu'a arrêt par un bouton
    Par Yepazix dans le forum Langage
    Réponses: 3
    Dernier message: 11/04/2006, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo