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 :

Transactions AJAX multiples et imbriquées, est-ce possible ?


Sujet :

jQuery

  1. #1
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Transactions AJAX multiples et imbriquées, est-ce possible ?
    Bonjour, je suis en train de coder un script de chargement de page via des template gérés par une base de donnée et j'ai un soucis car j'ai 2 .getJson qui se lancent en même temps et apparemment perdent leur petit.

    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
    function Load_Page(nom_page,arg){
    	Load_Content_Page(nom_page,arg);
    	Load_Menu_Page(nom_page,arg);
    }
     
    function Load_Content_Page(nom_page,arg){
    $.getJSON("get_content_page.php",{nom_page:nom_page},function(data){
     
    			NombreContent = data.jsonContentPageReturn.length	
    			for(index=0; index<NombreContent; index++){	
    				url_tmpl = data.jsonContentPageReturn[index][1];
    				Content = "Content" +  data.jsonContentPageReturn[index][0];
     
    				$.ajax({
    					type: 'GET',
             			url:'load.php',
    					data:{template: url_tmpl, arg: arg},
                        success: function(html) {
                         $('#'+Content+'').empty();
    					 $('#'+Content+'').append(html);
    					 },
    					 async:   false
    					 });          
    			}		
    });
    }
     
    function Load_Menu_Page(nom_page,arg){
    $.getJSON("get_menu_page.php",{nom_page:nom_page},function(data){
     
    			NombreMenu = data.jsonMenuPageReturn.length	
    			for(index=0; index<NombreMenu; index++){	
    				url_tmpl = data.jsonMenuPageReturn[index][1];
    				Menu = "Menu" +  data.jsonMenuPageReturn[index][0];
     
    				$.ajax({
    					type: 'GET',
             			url:'load.php',
    					data:{template: url_tmpl, arg: arg},
                        success: function(html) {
                         $('#'+Menu+'').empty();
    					 $('#'+Menu+'').append(html);
    					 },
    					 async:   false
    					 });          
    			}		
    });
    les résultats json:
    {"jsonContentPageReturn":[["1","auth\/inscription.tpl.php"],["2","auth\/inscription.tpl.php"]]}

    {"jsonMenuPageReturn":[["1","auth\/connexion.tpl.php"]]}

    sachant que je devrais avoir 3 content et 5 menu à recharger.
    Si qelqu'un sait comment corriger mon code ou connait une autre solution pour arriver au même résultat je suis preneur.
    Merci d'avance.

  2. #2
    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 : 73
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Pourriez-vous tester cette version corrigée (deux points virgule manquants et deux corrections) :
    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
    function Load_Page(nom_page,arg){
    	Load_Content_Page(nom_page,arg);
    	Load_Menu_Page(nom_page,arg);
    }
     
    function Load_Content_Page(nom_page,arg){
    	$.getJSON("get_content_page.php",{nom_page:nom_page},function(data){
     
    		NombreContent = data.jsonContentPageReturn.length;
     
    		for(index=0; index<NombreContent; index++){	
    			url_tmpl = data.jsonContentPageReturn[index][1];
    			Content = "Content" +  data.jsonContentPageReturn[index][0];
     
    			$.ajax({
    				type: 'GET',
    				url:'load.php',
    				data:{template: url_tmpl, arg: arg},
    				success: function(html) {
    					$('#'+Content).html(html);
    				}
    			});
    		}		
    	});
    }
     
    function Load_Menu_Page(nom_page,arg){
    	$.getJSON("get_menu_page.php",{nom_page:nom_page},function(data){
     
    		NombreMenu = data.jsonMenuPageReturn.length;
     
    		for(index=0; index<NombreMenu; index++){	
    			url_tmpl = data.jsonMenuPageReturn[index][1];
    			Menu = "Menu" +  data.jsonMenuPageReturn[index][0];
     
    			$.ajax({
    				type: 'GET',
    				url:'load.php',
    				data:{template: url_tmpl, arg: arg},
    				success: function(html) {
    					$('#'+Menu).html(html);
    				}
    			});          
    		}		
    	});
    }

    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.)

  3. #3
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Bon, avant correction j'avais Menu1 et Content1 de chargés
    les 2 get json qui se lançaient ensemble et 2 ajax load.php ensemble.
    Maintenant, j'ai Menu1 et Content2 de chargés et 3 ajax load.php.
    Je pense qu'il ne charge pas content1 car la variable et passée à 2 dans la boucle for et du coup quand la réponse arrive il la charge dans la 2.
    async false ne serait pas mieux dans les ajax des boucles for ?

    l'url des script sur le dedié:
    https://assassinphonic.fr/test/test.php

    [EDIT]
    Alors avec async false jai Menu1 et content1 qui se chargent.
    J'ai mi des sleep dans mes templates.
    Si content1 se charge avant Menu1 j'ai tout qui se charge.
    Mais le but étant que sa fonctionne sans les sleep.
    La version sur le dédié est sans async false et sans les sleep pour info.

  4. #4
    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 : 73
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour.

    J'ai examiné le code de votre lien, vous avez laissé l'ancienne version du code en plus de la nouvelle !

    Nota Bene : Pour getJSON() et jQuery 1.4, si votre code JSON est mal formé il échoue en silence ! Voir http://api.jquery.com/jQuery.getJSON/

    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.)

  5. #5
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    je pense que vous voulez parler de ça :
    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
    function Load_Content(nom_content,arg){
     
    $.getJSON("get_content.php",{nom_content:nom_content},function(data){
     
    			url_tmpl = data.jsonContentReturn[1];
    			Content = "Content" +  data.jsonContentReturn[0];
     
    			$.get("load.php",{template: url_tmpl, arg: arg},
    	        function success(html){
    	        $('#'+Content+'').empty();
    			$('#'+Content+'').append(html);
    			});
    });
    }
     
    function Load_Menu(nom_menu,arg){
     
    $.getJSON("get_menu.php",{nom_menu:nom_menu},function(data){
     
    			url_tmpl = data.jsonMenuReturn[1];
    			Menu = "Menu" +  data.jsonMenuReturn[0];
     
    			$.get("load.php",{template: url_tmpl, arg: arg},
    	        function success(html){
    	        $('#'+Menu+'').empty();
    			$('#'+Menu+'').append(html);
    			});
    });
    }
    ces deux fonctions marchent très bien, elles ont pour seul but de charger UN content ou UN menu.
    Elles sont d'ailleurs utilisées pour les liens mot de passe perdu et s'inscrire dans ce test.
    Le problème se trouve dans les fonction _PAGE qui elle peuvent recevoir des json à plusieurs lignes.

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour, confonté à ce genre de problèmes au taff, j'ai chainé mes requetes ajax.
    Du coup sur le callBack de la première, j'ai appelé ma deuxième requete.
    Il est possible cependant de lancer deux requetes ajax en parallèle, mais il faut ensuite chainer les autres, sinon ça ne marche pas bien.
    Voilà, j'espère que cette idée pourra vous aider.

  7. #7
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    bon voila j'ai trouve une solution qui me convient:
    j'ai modifier mon json pour kil renvoi tout mes menu et mes content en le specifiant dans le json et j'execute mes ajax en async false sinon sa ne marche pas.
    ma fonction:
    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
    function Load_Page(nom_page,arg){
    	$.getJSON("get_page.php",{nom_page:nom_page},function(data){
     
    		NombreMenu = data.jsonPageReturn.length;
     
    		for(index=0; index<NombreMenu; index++){
     
     
    			url_tmpl = data.jsonPageReturn[index][2];
    			div = data.jsonPageReturn[index][0] +  data.jsonPageReturn[index][1];
     
    			$.ajax({
    				type: 'GET',
    				url:'load.php',
    				data:{template: url_tmpl, arg: arg},
    				success: function(html) {
    					$('#'+div).html(html);
    				},
    			async: false
    			});          
    		}		
    	});
    }
    mon fichier qui genere le json:
    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
    <?php
    define ('ASSASSIN_ROOT', './');
    require_once ASSASSIN_ROOT.'commun.php';
     
    // L'objet user, démarrage de la session utilisateur
    $user = new AeUser();
    $user->session_begin();
     
    if($_GET['nom_page']){
    $nom_page = $_GET['nom_page'];}
    else{
    $nom_page ="blank";
    }
     
    $arrayPage = array();
    $i=0;
     
    $result = $db->get_array( "SELECT m.num_menu, m.url_tmpl FROM menus as m, pages as p WHERE p.nom_page = \"".$nom_page."\" AND m.id_menu = p.id_menu AND p.id_menu != 0");
    foreach ($result as $menu)
    {
    $arrayPage[$i][0] = "Menu";
    $arrayPage[$i][1] = $menu->num_menu;
    $arrayPage[$i][2] = $menu->url_tmpl;
    $i++;
    }
     
    $result = $db->get_array( "SELECT c.num_content, c.url_tmpl FROM contents as c, pages as p WHERE p.nom_page = \"".$nom_page."\" AND c.id_content = p.id_content AND p.id_content != 0");
    foreach ($result as $content)
    {
    $arrayPage[$i][0] = "Content";
    $arrayPage[$i][1] = $content->num_content;
    $arrayPage[$i][2] = $content->url_tmpl;
    $i++;
    }
     
     
     
    echo '{"jsonPageReturn":'.json_encode($arrayPage).'}';
     
    ?>
    si quelq'un voit une amelioration au niveaux du code ou des faute a coriger je suis preneur, je suis un novice en javascript.
    merci d'avance.

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

Discussions similaires

  1. une requete imbrique est ce possible avec hyperfile?
    Par android32 dans le forum HyperFileSQL
    Réponses: 0
    Dernier message: 01/12/2012, 18h21
  2. Réponses: 7
    Dernier message: 19/09/2012, 12h27
  3. Est-il possible d'imbriquer un IsNull ?
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/11/2007, 10h53
  4. [AJAX] Php/MySQL + AJAX : est ce possible
    Par johan06 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/10/2006, 09h58
  5. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 11h30

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