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 :

[AJAX] lier deux liste déroulante JSP + AJAX+ ORACLE


Sujet :

AJAX

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut [AJAX] lier deux liste déroulante JSP + AJAX+ ORACLE
    Bonjour,

    J'essaie d'effectuer la même chose que james23, à savoir le remplissage d'une liste déroulante suivant la sélection d'une première.

    J'ai suivi cette discussion et m'en suis servi en l'adaptant à mon projet, mais je suis bloqué et je n'arrive pas à résoudre mon problème.

    Je pense que mon problème se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xhr.open("GET","traitementMethods.jsp?service=" + service,true);
    xhr.onreadystatechange = function() { 
    	var tableauValeurs = eval("(" + xhr.responseText + ")");
    	refreshMethods(tableauValeurs); 
    };
    J'ai une Exception qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    10:07:50,284 INFO  [PortalImpl:3749] Current URL /web/guest/traitementMethods.jsp?service=2 generates exception: null
    10:07:50,284 INFO  [PortalImpl:3760] com.liferay.portal.NoSuchLayoutException
    com.liferay.portal.NoSuchLayoutException
    	at com.liferay.portal.service.impl.LayoutLocalServiceImpl.getFriendlyURLLayout(LayoutLocalServiceImpl.java:538)
    Ceci est une exception relevée par Liferay, mais peut-être que vous avez une idée du problème.

    et lorsque je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("GET","traitementMethods.jsp?service=" + service,true);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("GET","/traitementMethods.jsp?service=" + service,true);
    Je n'ai pas d'exceptions, ma deuxième liste déroulante se vide correctement mais ne se rempli pas avec les nouvelles valeurs, de plus si je fais ceci ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var tableauValeurs = eval("(" + xhr.responseText + ")");
    alert(tableauValeurs);
    Voici le contenu qui s'affiche...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html>
       <head>
           <title/>
           <meta content="1;url=/c" http-equiv="refresh"/>
       </head>
       <body onload="javascript:location.replace('/c')"></body>
    </html>

  2. #2
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    J'avais fais une source la dessus.

    => ICI

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Merci pour ta réponse llafont.

    J'ai regardé ton code, et j'ai l'impression d'avoir à peu près la même chose que toi, sauf que tu utilises la méthode POST et moi GET (dans un premier temps, j'utiliserai POST ensuite) et ensuite au niveau du retour de la requête tu fais un echo des balises <options> directement, ce que j'ai essayé aussi mais sans succès...

    Après, j'ai peut-être raté quelque chose ou mal compris un truc dans ton code étant donné que c'est du php et j'en ai que très peu fait !

    Par contre, l'alert de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var tableauValeurs = eval("(" + xhr.responseText + ")");
    alert(tableauValeurs);
    s'affiche 2 fois... Pourquoi ? Il n'est pas censé s'afficher qu'une seule fois ?

    Donc voila, si quelqu'un a une idée...

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Bon... J'ai passé l'aprem à chercher... Mais chaque fois que je testais un nouveau truc, c'était pire !
    Je suis donc revenue à ce que j'avais au début et ce que je vous ai posté.

    J'ai compris pourquoi l'alert s'affichait deux fois (dans mon précédent post), j'ai rajouté la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(xhr.readyState == 4 && xhr.status == 200) {
    ...
    }
    et voilà...

    Bon par contre, je n'ai toujours pas résolu mon problème, mais je suis certain que ça vient de cette ligne (en tout cas en partie ! )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tableauValeurs = eval("(" + xhr.responseText + ")");
    Si je mets une alert juste avant, elle s'affiche, juste après, elle ne s'affiche pas... Et quand je remplace cette ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tableauValeurs = xhr.responseText;
    Ca m'affiche je ne sais combien de "Undefined" dans ma seconde liste déroulante !

    Est-ce que ça parle à quelque'un, auriez-vous une idée pour résoudre mon problème ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Bon j'ai suivi cet exemple à partir de 0...
    http://siddh.developpez.com/articles/ajax/#LIV

    Voici mon code...
    dans mon fichier test.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='button' value='Dis quelque chose !' onclick='go()' />
    javascript.js
    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
    function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest) { // Firefox et autres 
    		xhr = new XMLHttpRequest();
    	} else if(window.ActiveXObject) { // Internet Explorer 
    		try { 
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) { 
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		} 
    	} else { 
    		// XMLHttpRequest non supporté par le navigateur 
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest"); 
    		xhr = false; 
    	}
    	return xhr;
    }
     
    function go() {
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert('reponse... '+xhr.responseText);
    		}
    	}
    	xhr.open("GET","../components/test/traitementMethods.jsp",true);
    	xhr.send(null);
    }
    traitementMethods.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%
    out.print("Hey !!");
    %>
    L'alert qui s'affiche contient tout le code de ma page ! Pourtant je pense avoir bien suivi les instructions pas à pas... Je ne comprends pas !

  6. #6
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Citation Envoyé par Air P-E Voir le message

    L'alert qui s'affiche contient tout le code de ma page ! Pourtant je pense avoir bien suivi les instructions pas à pas... Je ne comprends pas !

    De ta page traitementMethods.jsp ?
    C'est à dire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%
    out.print("Hey !!");
    %>
    Ou ta page contient d'autre information.
    Je risque d'être largué car mon domaine c'est plus le PHP que les JavaServer Pages

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Non, tout le code de la page contenant test.jsp.

    En fait mon test.jsp est le mode edit d'une portlet, et tout le code qui s'affiche, c'est celui de la page entière du Portail Liferay...

    Et ma page traitementMethods.jsp, ne contient pour le moment que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%
    out.print("Hey !!");
    %>
    Et bien si tu as des idées même en php, je veux bien ! Les jsp, je me débrouille pas trop mal donc je pourrai faire une traduction php -> JSP !

    Mais sinon voilà mon problème, je trouve ça quand même très bizarre, j'aimerai bien avoir des retour de james23, savoir s'il a réussi et comment il s'y ait pris.

    En tout cas, merci pour ton implication.

  8. #8
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Chez moi j'ai testé ç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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <html>
      <head>
        <title>Test JSP</title>
    	<Script>
    	function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest) { // Firefox et autres 
    		xhr = new XMLHttpRequest();
    	} else if(window.ActiveXObject) { // Internet Explorer 
    		try { 
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) { 
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		} 
    	} else { 
    		// XMLHttpRequest non supporté par le navigateur 
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest"); 
    		xhr = false; 
    	}
    	return xhr;
    }
     
    function go() {
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert('reponse... '+xhr.responseText);
    		}
    	}
    	xhr.open("GET","./traitementMethods.php",true);
    	xhr.send(null);
    }
    	</Script>
      </head>
      <body>
        <form>
          <input type='button' value='Dis quelque chose !' onclick='go()' />
        </form>
      </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    header("Content-Type:text/plain");
    echo "Hey !!";
    Ça fonctionne je ne vois pas d'où peux provenir ton problème si ce n'est du Java Server.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Ouais...
    J'ai fait comme toi, j'ai rajouté la ligne pour le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <%
    response.setHeader("Content-Type","text/plain");
    out.print("Hey !!");
    %>
    Mais bon, forcément, je m'en doutais, ça ne change strictement rien... C'est fou ça, toi ça marche, donc ça doit venir des JSP ou de Liferay mais comment savoir!?

    Et puis je ne pense pas avoir fait d'erreur dans mes JSP, étant donné que je n'ai quasi-rien sauf le contenu de traitementMethods.jsp...

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Bon je me suis repenché sur ce problème hier.

    Tout ce que j'avais fait était bon depuis le début... Mon problème venait en fait du chemin que je lui passais en paramètre qui ne correspondait pas au context...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var xhr = getXhr();
        // On défini ce qu'on va faire quand on aura la réponse
        xhr.onreadystatechange = function(){
            // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
            if(xhr.readyState == 4 && xhr.status == 200){
                alert('reponse... '+xhr.responseText);
            }
        }
        xhr.open("GET","traitementMethods.jsp",true);
        xhr.send(null);
    remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var xhr = getXhr();
        // On défini ce qu'on va faire quand on aura la réponse
        xhr.onreadystatechange = function(){
            // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
            if(xhr.readyState == 4 && xhr.status == 200){
                alert('reponse... '+xhr.responseText);
            }
        }
        xhr.open("GET","/cheminDeLaPortlet/traitementMethods.jsp",true);
        xhr.send(null);
    Sujet résolu ! Merci cependant de votre aide !

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

Discussions similaires

  1. [AJAX] Lier deux listes déroulantes avec ajax
    Par king_soft dans le forum AJAX
    Réponses: 1
    Dernier message: 07/01/2011, 09h49
  2. Réponses: 71
    Dernier message: 04/08/2010, 16h37
  3. [AJAX] lier 1 liste déroulante à un texte
    Par xoflam dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/02/2008, 19h47
  4. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  5. [AJAX] Lier une liste déroulant à un champ texte
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 13/04/2007, 14h50

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