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] innerHTML, setInnerHTML


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [AJAX] innerHTML, setInnerHTML
    Bonjour à tous!

    Après 3 jours de débâcle, je m'en remets à vous.
    Comme signifié dans le titre, mon problème concerne le rechargement d'une portion de page contenant du Javascript, grâce à AJAX.

    Je m'explique :
    J'ai un formulaire d'ajout de chansons (toujours les même projets !!). Lors de la validation de celui-ci, j'utilise XMLHttpRequest qui est censé faire l'insertion en BD et recharger le contenu d'un DIV. Ce DIV contient à l'origine une table, qui comme vous l'aurez compris contient la liste des chansons.
    Donc, lorsque je valide le formulaire, je fais appel à une fonction javascript qui s'occupe d'insérer en BD la nouvelle chanson saisie dans le formulaire et de recharger ma table avec les nouvelles valeurs (par un nouveau 'select' en BD).

    Fonction JS exécutée lors de la validation :
    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
     
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
         httpRequest = new XMLHttpRequest();
         if (httpRequest.overrideMimeType) {
              httpRequest.overrideMimeType('text/xml');
         }
              }
         else if (window.ActiveXObject) { // IE
              try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
              catch (e) {
                   try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
                        catch (e) {}
              }
         }
         if (!httpRequest) {
              alert("Abandon : blablabla...");
              return false;
         }
    httpRequest.open('POST', 'insert.php', false);
         httpRequest.onreadystatechange = function() {
              if (httpRequest.readyState == 4) {
                   if (httpRequest.status == 200) {
    setInnerHTML(document.getElementById('reload_div'), httpRequest.responseText);
                   } else { alert('Un problème est ...'); }
              }
    Contenu du fichier 'insert.php' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php header('Content-type: text/html; charset=iso-8859-1');
    mysql_connect($host,$user,$password) or die ("Erreur de conn..");
    mysql_select_db ($database) or die ("Erreur de co");
     
    $req = "insert into ...";
    	if ( !mysql_query ($req)) {
    		echo "Erreur lors de l'insertion de ...;
    	} else {
    		require_once "affich_table.php"; }
    ?>
    Le fichier 'affich_table.php' établit la structure d'un tableau avec les données récupérés en BD.

    Le souci, c'est que j'ai deux fonctions JS (dans 'affich_table.php') qui permettent le tri en temps réel de la table et l'affichage d'infobulles. Ces deux fonctions utilisent jQuery.
    Quant j'arrive sur la page initialement, le tri et les infobulles marchent correctement. Lorsque je réalise une première insertion et que ma table est rechargée, ces deux fonctions ne fonctionnent plus.

    Mon problème revient donc à l'exécution de code JS au travers de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     httpRequest.responseText
    J'ai lu énormément de discussion qui traitent de ce sujet. Malheureusement, j'ai n'ai toujours pas de solutions et je suis à présent complètement perdus.


    setInnerHTML devait être la fonction miracle, qui permettait de 'mettre à jour' un div en prenant en compte le code javascript. Mais cela ne fonctionne pas.
    J'ai essayé également de recharger uniquement le contenu de la table, placer dans les DIV grâce à 'innerHTML' et ensuite de rapellé directement mes fonctions JS. sans succès...
    Quelqu'un peut m'expliquer la fonction append() propre à jQuery, qui semblerait être une solution ?


    J'ai besoin d'aide là ...
    Help Me Please...

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tout d'abord, une question qui n'a rien à voir, mais si tu utilises jQuery, pourquoi tu ne t'en sers pas pour faire une requête Ajax ???

    Sinon, pour ton problème (et tu vas voir, c'est quand même lié), lorsque tu mets à jour ta page en insérant affich_table.php, les scripts ne sont pas exécutés (surtout en exploitant le responseText !) il me semble, donc plus de tri, plus d'infobulle...

    Enfin, une requête Ajax avec jQuery évalue lui automatiquement les scripts par défaut...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pour info, ta fonction jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $.post({
    url: 'insert.php',
    datatype: 'html',      même pas nécessaire, mais pour rassurer !
    success: function(reponsehtml){
        $("#reload_div").html(reponsehtml);
      }
    });
    Et c'est tout...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Tu utilises la fonction setInnerHTML de Fremy?

    Si oui, regarde ici

    Est-ce que tu peux être sur que dans tout le framework jQuery, il n'y a pas une fonction écrite comme il ne faut pas? ^^

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bovino >> Tout d'abord, une question qui n'a rien à voir, mais si tu utilises jQuery, pourquoi tu ne t'en sers pas pour faire une requête Ajax ???

    Si j'avais su .... !!! En effet, avec responseText, le contenu JS n'est pas pris en compte, donc pas d'infobulles ni de tri de table après le premier rechargement.
    Je vais donc essayer avec JQuery pour faire de l'AJAX, quand tout fonctionnera j'essayerais de comprendre!

    DoubleU >> Tu utilises la fonction setInnerHTML de Fremy?
    En effet !! je pensais que c'était la solution miracle, mais ça ne marche pas (même après la pirouette de la définition des fonctions).


    Merci à vous 2! Je teste...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je suis désolé Bovino, mais la fonction Ajax ne fonctionne pas : ma table ne se met pas à jour..
    J'ai essayé ton code et ça également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jQueryVarNoConflict.ajax({
         type: "POST",
         url: "insert.php",
         data: "lib_r=" + param1 + "&desc=" + type,
         success: function(reponsehtml){
            jQueryVarNoConflict("#reload_div").html(reponsehtml);
         }
    });
    Une idée ??

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour tout le monde.

    Finalement, j'ai réussi ce que je voulais faire (total temps passé : 43heures !!! , très fâché).. Je précise que je n'ai pas pu mettre en œuvre la solution recherchée en début de post.
    J'explique ma "solution" : j'ai utilisé les diverses fonctions du plugin pour refaire tout le cheminement exécuté lors de l'initialisation de l'objet. Ce plugin est basé sur un cache (initialisé lors de la phase de construction de l'objet).

    J'ai définis un évenement clic sur un bouton. Lors du clic sur ce bouton, une ligne est ajoutée au tableau HTML présent sur le premier slide, puis une fonction récupère la ligne html ajoutée et l'ajoute au cache du plugin (cache total puisque celui-ci est divisé car le tableau possède un affichage par page). Je réutilise ensuite les fonctions pour mettre en forme le cache sur le slide1.
    Voilà, je pense pas que ça serve à grand chose (d'ôu les guillemts à solution), mais bon, sait-on jamais....

    Sinon, personne n'a d'idées pour le problème lors de la phase d'initialisation (constructeur) entre IE et Firefox??
    Merci à tous !

    EDIT : Merci pour ta proposition Bovino.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pour le problème du constructeur, il semblerait que ce soit une seule partie de mon code qui ne fonctionne pas, et plus précisément cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var nb_occ = document.forms['formAjout'].elements['libelle_form'].value.length;
    'document.all' ne fonctionne pas non plus, ni 'document.getElementById'...
    Auriez-vous une idée pourquoi ??

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['formAjout'].elements['libelle_form']
    libelle_form est-il unique ?
    C'est quoi comme balise ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Invité
    Invité(e)
    Par défaut
    libelle_form est unique et correspond à un input type="text"

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bon, plus de réponse, je clos le sujet.

    Merci à tous

Discussions similaires

  1. [AJAX] Ajax, innerHTML et fonction javascript - solution ?
    Par gouroulubrik dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/03/2008, 21h35
  2. [AJAX] Ajax, innerHTML et variable javascript
    Par philippejuju dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/01/2007, 11h30
  3. [AJAX] innerHTML : code altéré
    Par avogadro dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 23/08/2006, 15h35
  4. [AJAX] innerHTML et IE
    Par gmonta31 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2006, 11h12
  5. AJAX + Innerhtml + img => Bug sous IE
    Par GregPeck dans le forum Langage
    Réponses: 12
    Dernier message: 07/02/2006, 17h43

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