Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 14h31   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 175
Points : 33
Points : 33
Par défaut Liste dynamique trop grosse pour un select

Bonjour,
Je souhaite réaliser une page dans laquelle la sélection d'un premier select permet de géréner l'affichage du second.
J'utilise pour cela l'Ajax mais mon problème est le suivant : lorsquel la taille de la liste générée est petite (par exemple 2 éléments), ça fonctionne très bien mais si la taille de la liste est importante (dans mon cas plus de 4000 éléments à afficher), le second select reste tout simplement vide.
Voici des fragments de mon code (je développe une application web en java) :
page jsp : code Ajax : fonction appelée lors du choix dans le 1er select :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
var xhr1;
function getContributorValues(rightcalculationmanagementid){
    if (window.XMLHttpRequest) {
        xhr1 = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xhr1 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhr1.open("GET", 'statement.do?actionType=SETCONTRIBUTOR&rightcalculationmanagementid='+rightcalculationmanagementid);
    xhr1.onreadystatechange = function() { setContributorValues(xhr1); };
    xhr1.send(null);
}
Fonction appelée pour remplir le second select :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function setContributorValues(xhr){
    if(xhr.readyState == 4 && xhr.status == 200){
        var sel = document.getElementById('contributoraccessidF').childNodes[0];
        sel.options.length=0;
        var groups = xhr.responseXML.getElementsByTagName('contributor');
        sel.options[0] = new Option('',0);
        for (var i=0;i<groups.length;i++){
            name = groups[i].getElementsByTagName('name')[0].firstChild.nodeValue;
            value = groups[i].getElementsByTagName('value')[0].firstChild.nodeValue;
            sel.options[i+1] = new Option(name,value);
        }
    }
}
code java dans ma classe Action pour alimenter la liste :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='ISO-8859-1'?>");
sb.append("<contributors>");
//La liste contributors peut contenir plus de 4000 éléments
for (Contributor contributor : contributors){
     sb.append("<contributor>");
     sb.append("<name>").append(contributor.getName()).append("</name>");
     sb.append("<value>").append(contributor.getContributorid()).append("</value>");
     sb.append("</contributor>");
}
sb.append("</contributors>");
 
response.addHeader("Content-Type", "text/xml");
response.getWriter().write(sb.toString());
Encore une fois, ceci fonctionne parfaitement si la taille de la liste est raisonnable.
Mais alors, comment faut-il faire ?

Merci par avance pour votre aide et/ou suggestions.
jgfa9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 15h35   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 123
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 123
Points : 7 284
Points : 7 284
Bonjour,

Tu es sûr de ne pas avoir une valeur vide pour contributor.getName() et contributor.getContributorid() ou des caractères spéciaux?

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 15h39   #3
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 175
Points : 33
Points : 33
C'était bien ça : j'avais un caractère "&" dans mon xml. J'ai donc corrigé le java ainsi :

Code :
response.getWriter().write(StrUtil.replaceText(sb.toString(), "&", "&amp;"));
Merci beaucoup !
jgfa9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h26.


 
 
 
 
Partenaires

Hébergement Web