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 :

Ajax et jQuery - Faire deux requêtes simultannées


Sujet :

jQuery

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Ajax et jQuery - Faire deux requêtes simultannées
    Hello tout le monde

    Voici mon problème :

    J'exécute une requête en Ajax qui peut prendre beaucoup de temps (5 secondes à plusieures heures).
    Le temps que cette requête s'exécute, je passe le taux d'avancement en session coté serveur.

    Mon but est de récupérer ce taux avec une autre requête Ajax afin de mettre à jour un champs coté client. (avec une boucle sur un setTimeout de 2 secondes)

    Le problème est que cette dernière requête ne me retourne le résultat qu'une fois la première requête terminée. (et donc m'affiche 100% d'avancement)

    Voici mon code :

    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
     
    $('#launchSitemapCheck')
    	.click( function() {
    		getCountDown(); //appel a la fonction qui appelle l'avancement
    		var soumission = $.ajax({
    			type: "POST",
    			url: "monURL.php",
    			data: "toto=1",
    			success: function(reponse){
    				alert(reponse);
    			}
    		});
     
    	});
     
    function getCountDown() {
    	setTimeout(function(){
    	var appel2 = $.ajax({
    		url: "2emeURL.php",
    		success: function(rep){
    			alert(rep);
    			getCountDown();					
    		}
    	});					
    	}, 2000);
    };
    Pour info, j'ai essayé d'appeller la fonction getCountDown() dans un .ajaxStart, ça ne change rien.

    Si vous avez une idée, je suis preneur, ça fait 1 semaine que je suis sur ce problème.

    Merci d'avance

    l0wk3y

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    push une nouvelle instance dans un array avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push(new getCountDown())
    mais pas sur que les retours ne s'emmêlent pas les pinceaux, doit falloir ajouter un truc dans le header
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta rapidité.

    Du coup, j'ai ajouté un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var tabInstanceGetCD = new Array();
     
    .click( function() {
    	tabInstanceGetCD.push(new getCountDown());
    [...]
    });
    Idem pour la récursion, mais ça ne change rien.

    Concernant le header, tu pensais à quelque chose en particulier ?

    Merci

    l0wk3y

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Est-ce que monURL.php et 2emeURL.php sont bien deux
    fichiers php distinct et non le même comme index.php?cmd=1 et
    index.php?cmd=2 ? car si tu appelle le même fichier, le moteur
    php va pas les exécuter en parallèle.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Hello

    Effectivement, les deux fichiers sont bien distincts.
    Le premier ne fait que remplir une variable de session (et d'autres calculs plus ou moins long) et le second ne fais que la lire.

    l0wk3y

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Les navigateurs ont aussi des limites quant au nombre de requêtes simultanées.

    Tu peux sous Firefox vérifier l'état de chaque requête via Firebug.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Pas de soucis à ce niveau là puisqu'il n'y a que 2 requêtes simultanées.

    La première se lance. 2 secondes après, la deuxième se lance.
    Les deux requêtes tournent en simultané. (aucune réponse de la deuxième)
    La première répond et s'arrête. La seconde fait pareil.

    Le statu final des 2 pages appellées est à 200.

    Pour tester : http://www.seo-analyzer.fr/google-in...n-sitemap.html
    Il faut juste valider le formulaire.

  8. #8
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Alors vraisemblablement le souci vient du code PHP sur le serveur.

    Par exemple, n'y a t'il pas un mécanisme de synchronisation au niveau de la session où est stockée la progression qui pourrait bloquer le second script ?

    Dans ce cas il faudra peut-être utiliser un autre mécanisme pour stocker la progression, comme une base de données ou un fichier.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  9. #9
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par seriousme Voir le message
    Alors vraisemblablement le souci vient du code PHP sur le serveur.

    Par exemple, n'y a t'il pas un mécanisme de synchronisation au niveau de la session où est stockée la progression qui pourrait bloquer le second script ?

    Dans ce cas il faudra peut-être utiliser un autre mécanisme pour stocker la progression, comme une base de données ou un fichier.
    Je confirme, ça marche pour moi avec une base de donnée et si je
    me souviens bien, j'avais du y recourir car la session n'est pas modifiée
    par le process long avant la fin du script.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Yes, vous êtes géniaux les gars !
    En faite pour les tests, je ne récupérais pas la variable de session, je faisais simplement un echo. Mais j'ai oublié d'enlevé le session_start()... Et effectivement, ça fait tout planter...

    Merci à tous

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je voudrais juste ajouter une chose : c'est possible de récupérer la session. Grâce à vos pistes, j'ai pû avancer mes recherches.

    Pour cela, il faut ouvrir la session, écrire dedans, et la refermer. Et ensuite on recommance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    session_start();
    $_SESSION['countDown'] = round((($idxURL/$nbURL)*100),2)." %";
    session_write_close ();
    Merci à tous pour votre précieuse aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] faire une requête mysql ajax
    Par affreuxzozo dans le forum AJAX
    Réponses: 1
    Dernier message: 04/05/2009, 13h16
  2. [Yahoo UI] Comment faire des requêtes AJAX synchrones ?
    Par kaboume dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 30/03/2009, 10h02
  3. [JQuery] Requête ajax avec jQuery
    Par ApheX2 dans le forum jQuery
    Réponses: 3
    Dernier message: 28/08/2008, 22h40
  4. [AJAX] Conflits lors de deux requêtes AJAX dans la même fonction js
    Par fayred dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/07/2008, 14h49
  5. [MySQL] Faire une requête recourant à deux bases de données
    Par bourvil dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/04/2006, 15h35

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