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

AJAX Discussion :

Ordonner les données dans une boucle each


Sujet :

AJAX

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Ordonner les données dans une boucle each
    Bonjour

    J'ai un tableau que je récupère à partir d'un controleur spring boot:

    [{"numDossier":"do001"}, {"nomArticle":"huile","quantiteEntree":88,"typeArticle":"vidange"}, {"nomArticle":"huile","quantiteEntree":27,"typeArticle":""}, {"numDossier":"do002"}, {"nomArticle":"huile","quantiteEntree":200,"typeArticle":""}]
    Et voici comment je récupère ces données dans Ajax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     success: function(response, textStatus, jqXHR){
     
    	         var result = response;
     
    	         $.each(result, function(i, obj) {	
    	  console.log("Numéro dossier: "+obj.numDossier+"; Nom article: "+obj.nomArticle+"; Type Article: "+obj.typeArticle+"; Quantité entrée: "+obj.quantiteEntree);
    });
    Donc j'ai les données sous cette forme:

    Numéro dossier: do001; Nom article: undefined; Type Article: undefined; Quantité entrée: undefined
    Numéro dossier: undefined; Nom article: huile; Type Article: vidange; Quantité entrée: 88
    Numéro dossier: undefined; Nom article: téléphone; Type Article: samsung; Quantité entrée: 27
    Numéro dossier: do002; Nom article: undefined; Type Article: undefined; Quantité entrée: undefined
    Numéro dossier: undefined; Nom article: chaussure; Type Article:soulier; Quantité entrée: 200
    Ce tableau veut dire que pour chaque dossier , j'ai des entrées d'article. Pour le dossier do001, j'ai 2 articles(huile et téléphone) et pour le dossier do002 j'ai un seul article (chaussure).

    J'aimerai donc afficher mes données sous cette forme:

    Numéro dossier: do001
    Nom article: huile; Type Article: vidange; Quantité entrée: 88
    Nom article: téléphone; Type Article: Samsung; Quantité entrée: 27
    Numéro dossier: do002
    Nom article: chaussure; Type Article: soulier; Quantité entrée: 200
    Merci

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 391
    Points : 4 806
    Points
    4 806
    Par défaut
    Bonjour,

    Pourquoi tu gères ça au niveau client et pas serveur ? à ta place je modifierais le code "serveur" afin qu'il ajoute la variable numDossier dans chaque entrée de l'objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
    {"numDossier":"do001","nomArticle":"telephone","quantiteEntree":88,"typeArticle":"vidange"}, 
    {"numDossier":"do002","nomArticle":"huile","quantiteEntree":200,"typeArticle":""},
    {"numDossier":"....","nomArticle":"...","quantiteEntree":"....","typeArticle":"...."} 
    ]
    Ou bien grouper les entrées par numDossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [
    {"do001":
          {"nomArticle":"huile","quantiteEntree":88,"typeArticle":"vidange"},
          {"nomArticle":"telephone","quantiteEntree":88,"typeArticle":"vidange"}
    }, 
    {"do002":
          {"nomArticle":"huile","quantiteEntree":200,"typeArticle":""},
          {"nomArticle":"...","quantiteEntree":"....","typeArticle":"...."}
    }
    ]
    Comme ça quand les données arrivent dans le success d'ajax, tu n'as qu'à traiter chaque item en fonction de son numDossier, non ?

  3. #3
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    J'ai pensé à ça, malheureusement je n'ai pas pu faire ça coté serveur. 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    @RequestMapping(value="/entrepot", method=RequestMethod.POST)
    	public void getAllMagasinage(ModelMap model,@RequestParam(name = "numDossierRecherche") String numDossier, @RequestParam(name = "nomClientRecherche") String nomClient, HttpServletResponse response) throws ServletException, IOException {
     
    		 response.setContentType("text/html;charset=UTF-8");
     
    		List<Dossier> listeDossiers = null;
    		List<Entree> listeEntrees = null;
     
    				long  idClient = clientService.findIdClientByNomClient(nomClient);
    				listeDossiers = dossierService.findDossierByIdClient(idClient);
     
     
    			if (listeDossiers.isEmpty()) {
    				response.getWriter().println("Aucun résultat trouvé!!!");
    			} 
    			else
    			{
    				List<JSONObject> entities = new ArrayList<JSONObject>();
     
    			    for (Dossier d : listeDossiers) {
    			    	JSONObject entity = new JSONObject();			    	
    			    	entity.put("numDossier", d.getNumDossier());			    	
    			    	entities.add(entity);
     
    			    	listeEntrees = entreeService.findListEntreeByIdDossier(d.getIdDossier());
    			    		for (Entree n : listeEntrees) {
    			    			JSONObject entity2 = new JSONObject();
    			    			entity2.put("nomArticle", n.getNomArticle());
    			    			entity2.put("typeArticle", n.getTypeArticle());
    			    			entity2.put("quantiteEntree", n.getQuantiteEntree());
    			    			entities.add(entity2);			    			
    			    		}
     
    			    }
     
    			    response.getWriter().println(Arrays.toString(entities.toArray()));
    			}
     
    	}

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 391
    Points : 4 806
    Points
    4 806
    Par défaut
    Bonjour,

    Je n'ai pas les moyens pour tester le code java, par-contre je suis sûr que la solution est au niveau des deux boucles.

    Il va falloir renvoyer la discussion sur le forum java web afin d'avoir plus de chance...

  5. #5
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Bonjour,

    Ou bien grouper les entrées par numDossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [
    {"do001":
          {"nomArticle":"huile","quantiteEntree":88,"typeArticle":"vidange"},
          {"nomArticle":"telephone","quantiteEntree":88,"typeArticle":"vidange"}
    }, 
    {"do002":
          {"nomArticle":"huile","quantiteEntree":200,"typeArticle":""},
          {"nomArticle":"...","quantiteEntree":"....","typeArticle":"...."}
    }
    ]
    Comme ça quand les données arrivent dans le success d'ajax, tu n'as qu'à traiter chaque item en fonction de son numDossier, non ?
    Si tu as remarqué c'est exactement ce que je fais coté serveur, j'ai bien regroupé les entrées par dossier:

    [{"numDossier":"do001"}, {"nomArticle":"huile","quantiteEntree":88,"typeArticle":"vidange"}, {"nomArticle":"huile","quantiteEntree":27,"typeArticle":""}, {"numDossier":"do002"}, {"nomArticle":"huile","quantiteEntree":200,"typeArticle":""}]
    Ok je vais soumettre le problème dans une autre discussion.

    Merci

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 391
    Points : 4 806
    Points
    4 806
    Par défaut
    Bonjour,

    Sinon si tu ne veux pas modifier le code serveur (même si que j'insiste de le faire), tu peux par exemple filtrer les données comme ç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
     
    let data=[{"numDossier":"do001"}, {"nomArticle":"huile","quantiteEntree":88,"typeArticle":"vidange"}, {"nomArticle":"huile","quantiteEntree":27,"typeArticle":""}, {"numDossier":"do002"}, {"nomArticle":"huile","quantiteEntree":200,"typeArticle":""}],
    indexDossier=-1,indexes=[];
     
    $(data).each(function(index,elem){
       if(elem.numDossier) {
    	 indexDossier=index;
    	 indexes.push(index);
       }
        else if(!elem.numDossier && index>indexDossier){
             elem.numDossier=data[indexDossier].numDossier;
       }
    });
     
    data=$.grep(data,function(elem,index){
    	return $.inArray(index,indexes)==-1;
    });
     
    console.log(data);//affichage

Discussions similaires

  1. AJAX Liste les données dans une boucle
    Par karpe dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 24/04/2018, 12h51
  2. ordonner les données d'une feuille dans une macro
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2008, 16h27
  3. initialiser les vertex dans une boucle for
    Par StrikerFred dans le forum DirectX
    Réponses: 10
    Dernier message: 26/09/2006, 11h36
  4. inserer les données dans une base de donnée a partir d'un datagrid
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 31/07/2006, 01h46
  5. Réponses: 3
    Dernier message: 28/12/2005, 16h29

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