Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plusieurs requêtes ajax en même temps

Sujet résolu
    21 février 2015 à 10:36:59

    Bonjour à tous,
    Je cherche à lancer avec Ajax un script long à exécuter, et à l'aide d'une deuxième fonction informer l'utilisateur de l'avancement du script.
    Il faut donc :
    - que je lance le script avec une première requête ajax
    - que je lance une fonction qui contient une deuxième requête ajax, qui va récupérer l'avancement du script (grâce à un fichier texte mis à jour régulièrement par le script principal)
    - si l'avancement n'est pas de 100%, la fonction de vérification repart

    J'ai donc pensé à ceci :

    $(function() {
    	//Fonction qui vérifie l'avancement du script
    	function checkAvancement () {
    		$.ajax({
    			url: "avancement.php",
    			type: "POST"
    		}).done(function (data) {
    			alert(data);
    			//Si l'avancement n'est pas à 100%, cette fonction est relancée
    			if(data != 100) {
    				setTimeout(checkAvancement(), 1);
    			}
    		});
    	}
    	
    	//Au clic :
    	$('#lien_demarrer').click(function () {
    		//Le lien est caché
    		$('#p_demarrer').hide();
    		//Lancement de la vérification qui vérifie l'avancement du script
    		setTimeout(checkAvancement(), 100);
    		//Lancement du script
    		$.ajax({
    			url: "ajout.php",
    			type: "POST"
    		}).done(function (data) {
    			alert(data);
    		});
    		return false;
    	});
    });


    Le problème est que la fonction checkAvancement () se lance une première fois au tout début, ensuite ne fait plus rien tant que le script principal n'est pas terminé, et se ré-exécute une fois qu'il est fini. En gros le navigateur n'exécute pas les 2 fonctions en même temps.


    Je précise que je n'utilise que très rarement JS donc je le maitrise très mal.

    Auriez-vous une solution ?
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2015 à 13:29:53

      Salut, 

      Au lieu de setTimeout(checkAvancement(), 100); (ligne 21)

      Essais juste de faire un  appel :  checkAvancement();



      • Partager sur Facebook
      • Partager sur Twitter
      Ça tombe pas dans l'orteil d'un sourd ...
        21 février 2015 à 14:24:41

        Salut,

        C'est ce que j'avais fait au départ, et ça me fait la même chose...

        checkAvancement() se lance 1 fois au début et une fois à la fin de l'exécution du script principal

        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2015 à 14:42:59

          hummm ...

          et avec un <body onload=checkAvancement();> ? 

          • Partager sur Facebook
          • Partager sur Twitter
          Ça tombe pas dans l'orteil d'un sourd ...
            21 février 2015 à 14:56:10

            La fonction tourne en boucle au chargement de la page, mais dès que je clique sur le lien permettant de lancer le script principal elle s'arrête, et ne reprend qu'à la fin de l'exécution de la requête Ajax....

            Après peut être qu'il est impossible de faire tourner 2 requêtes en même temps ?

            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2015 à 15:15:03

              Problème résolu !

              En faisant des recherches sur mon problème, je suis tombé sur ce sujet : http://www.developpez.net/forums/d995393/webmasters-developpement-web/javascript-ajax-typescript-dart/javascript/bibliotheques-frameworks/jquery/ajax-jquery-faire-requetes-simultannees/

              Le problème venait du fait que j'avais fait un session_start() sur les 2 pages chargées par les requêtes Ajax, ce qui faisait tout planter.

              Maintenant que j'ai retiré le session_start() d'une des deux pages ça fonctionne parfaitement !

              Merci de m'avoir aidé :)

              -
              Edité par ElfeezAc 21 février 2015 à 15:15:33

              • Partager sur Facebook
              • Partager sur Twitter

              Plusieurs requêtes ajax en même temps

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown