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

JavaScript Discussion :

[AJAX] probleme avec innerhtml


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut [AJAX] probleme avec innerhtml
    Bonjour,

    j'ai un probleme avec ma fonction makerequest que g legerement modifié

    Je lui passe en parametre le nom de la div que je vé actualisé par innerHTML.

    Le probleme est que le premier message "veuillez patienter" marche mais rien ne se passe après, le deuxieme innerhtml ne marche pas, pouvez vous maideZ?

    voici le 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <script type="text/javascript" language="javascript">
     
        var http_request = false;
     
        function makeRequest(url, nomdoc) {
     
     
     
            http_request = false;
     
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
     
            if (!http_request) {
                alert('Abandon :( Impossible de créer une instance XMLHTTP');
                return false;
            }
            http_request.onreadystatechange = alertContents(nomdoc);
            http_request.open('GET', url, true);
            http_request.send(null);
     
        }
     
        function alertContents(nomdoc) {
    	if (http_request.readyState != 4) {
            document.getElementById(nomdoc).innerHTML = "<br /><br /><center>Veuillez patientez...</center>";
    	}
    	if (http_request.readyState == 4) {
    		if (http_request.status == 200) {
    			document.getElementById(nomdoc).innerHTML = http_request.responseText;
    		} else {
                alert('Un problème est survenu avec la requête.');
    		}
    	}
     
    }
     
     
     
    </script>

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    personne?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Une solution :

    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
     
        var http_request = false;
     
        function makeRequest(url, nomdoc) {
     
     
     
            http_request = false;
     
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
     
            if (!http_request) {
                alert('Abandon :( Impossible de créer une instance XMLHTTP');
                return false;
            }
     
     
     
            // <- tu ne peu pas passer de valeurs sur un declaration / reference ver un fonction
            // j'utilise un eval pour que tu ai la valeur mais c pas propre .. malgrés ça je ne connais pas d'autre solution.. :/
     
            eval("http_request.onreadystatechange = function alertContents() { "+
    		   "if (http_request.readyState == 4) {"+
    			"	 document.getElementById('"+nomdoc+"').innerHTML = http_request.responseText;"+
    			"} else {"+
    			"	document.getElementById('"+nomdoc+"').innerHTML = '<br /><br /><center>Veuillez patientez...</center>';"+
    			"}}");
     
            http_request.open('GET', url, true);
            http_request.send(null);
     
        }

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    lance le "veuillez patientez" en début de fonction makerequest();

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    ok merci ça marche

    maintenant j'ai un autre prob lors du passage de parametres:
    je fais 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
    <select name="numcateg">
    <option selected></option>
    <?php
    $requetelistecateg      =       "SELECT *
                                                     FROM categflux 
                                                     ORDER BY nomcateg"; //Requete affichant les catégories de flux
    $resultatlistecateg= mysql_query ($requetelistecateg,$connexion);
     
    while ($nomc=mysql_fetch_object ($resultatlistecateg)) //Lecture ligne par ligne du resultat de la requete
    {
            $num= $nomc->numcateg;
            $nom= $nomc->nomcateg;
            ?>
    	<option value=<?php echo $num; ?> onClick="makeRequest('deletecateg.php?num=<?php echo $num; ?>','supcateg');"><?php echo $nom; ?></option>
    	<?php
    }
    ?>
    </select>
    mais ça ne marche pas sur IE, je dois donc mettre le onclick sur le select c bien ça? si oui quelle est la syntaxe pour récupérer la valeure de l'option choisie?

    merci d'avance

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    pof.. (pas testé hin.. p-e une erreur conne )

    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
    <select name="numcateg" onChange="makeRequest('deletecateg.php?num='+this.value ,'supcateg');">
    <option selected></option>
    <?php
    $requetelistecateg      =       "SELECT *
                                                     FROM categflux 
                                                     ORDER BY nomcateg"; //Requete affichant les catégories de flux
    $resultatlistecateg= mysql_query ($requetelistecateg,$connexion);
     
    while ($nomc=mysql_fetch_object ($resultatlistecateg)) //Lecture ligne par ligne du resultat de la requete
    {
            $num= $nomc->numcateg;
            $nom= $nomc->nomcateg;
            echo "<option value='$num'>$nom</option>"; // si si sa marche comme sa aussi!!!!!!! ^^
    }
    ?>
    </select>

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    le onclick se déclenche lors de la sélection d'une catégorie, comment le faire lors du choix d'une catégorie?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    c bon ça marche merci a tous;
    j'ai modifié ma fonction makerequest, cette fois la variable nomdoc prend plusieurs valeurs de cette façon:
    nomdoc=listecateg,ajoutcateg,supcateg
    j'ai donc modifié les innerhtml:
    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
    	nomdoc=","+nomdoc+",";
    	var longnomdoc=nomdoc.length;
    	var i=0;
     
    	for (i=1;i=longnomdoc;i++) {
    	j=nomdoc.substr(i,1);
    	if (j==",") {
    		newdoc=nomdoc.substr(i+1,nomdoc.indexOf(",",i+1));
    		eval("http_request.onreadystatechange = function alertContents() { "+
    			"if (http_request.readyState == 4) {"+
    			"    document.getElementById('"+newdoc+"').innerHTML = http_request.responseText;"+
    			"} else {"+
    			"   document.getElementById('"+newdoc+"').innerHTML = '<br /><br /><center>Veuillez patientez...</center>';"+
    			"}}");
    		}
    	}
    Dans ce code, j'extrait les noms entre virgules pour ensuite appliquer le innerhtml dessus, mais g des erreurs, de syntaxe sans doute.

    pouvez vous m'aider?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    personne?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    quelqu'un?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    ...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    sa ça ne peu pas marcher..
    Et en plus tu te prend la tête pour rien avec ta recherche de chaaracteres....


    Explique mieu que je puisse te repondre...
    tu veu donner une liste de divs et y copier le meme texte a chacunes?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Points : 83
    Points
    83
    Par défaut
    oui g une liste de div (chaque div est séparée par des virgules) et je veux appliqué un innerhtml pour chacunes...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Sa devien un peu plus cho....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
           nomdoc=","+nomdoc+",";
           for (o in (tmp = nomdoc.split(',')))
               document.getElementById(tmp[o]).innerHTML = '<br /><br /><center>Veuillez patientez...</center>'; // il faut le fair avant sinon il va le réécrir 50000 fois!!!
     
          eval("http_request.onreadystatechange = function alertContents() { "+
             "    lesdivs = \""+nomdoc+"\";"+
             "if (http_request.readyState == 4) "+
             "    for (o in (tmp = lesdivs.split(',')))"+
             "        document.getElementById(tmp[o]).innerHTML = http_request.responseText;"+
             "}");

    Pareil pas testé... p-e une erreur conne... Normalement il serai plus sage de ne pas fair un eval et d'exterioriser la valeur de lesdivs....
    split transforme une chaine de chars en tableau grace au "separateur" que tu lui passe en parametres...

    Selon comment ta mis tes virgules la valeur de "tmp[o]" peut être fause (vide) tu peu rajouter un test genre
    if (document.getElementById(tmp[o]))
    document.getElementById(tmp[o]).innerHTML = http_request.responseText;

Discussions similaires

  1. JSF/Ajax : Probleme avec un selectOneListbox
    Par tmanta7 dans le forum JSF
    Réponses: 0
    Dernier message: 03/04/2010, 18h33
  2. Réponses: 4
    Dernier message: 14/01/2010, 16h27
  3. Réponses: 4
    Dernier message: 28/11/2008, 13h45
  4. probleme avec innerHTML
    Par phpiste dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/09/2007, 17h39
  5. probleme avec innerHTML
    Par GTJuanpablo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/02/2006, 15h06

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