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

Bibliothèques & Frameworks Discussion :

AJAX/PHP Mettre à jour une div avec un contenu TabContainer


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 17
    Points
    17
    Par défaut AJAX/PHP Mettre à jour une div avec un contenu TabContainer
    Salut,

    je mouline, je tourne autour du pot, mais je ne trouve pas, alors je me résous à poster sur le forum.
    Je ne peux pas mettre le code car il est éclaté en plein de fichiers ; et j'ai la flemme. ^^

    Imaginez une page avec une div BorderContainer (classique) qui contient 2 div (disons un ContentPane à gauche et un TabContainer à droite).
    Dans le div de gauche un lien <A HREF="#" onclick="mafonction()"> qui appelle une fonction ajax pour mettre à jour la div de droite.

    Dans le head, code javascript, j'ai un truc du genre (j'ai épuré le code, mais que du classique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var req = new XMLHttpRequest();
    .....
    ....
    		req.onreadystatechange = function()
    		{ 
    					var doc = req.responseText;
    					dojo.byId("principal").innerHTML=doc;
    		}; 
    		req.open("GET", "ma_page.php", true);
    Et ma page ma_page.php contient (c'est du test hein)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            <div data-dojo-type="dijit.layout.ContentPane" title="tab #3">tab #1</div>
            <div data-dojo-type="dijit.layout.ContentPane" title="tab #3">tab #2</div>


    Bref, quand je clique sur le lien, la page php est bien retournée par la fonction ajax, mais elle n'est pas interprétée par dojo comme telle.

    Ca doit être bête comme choux, mais il me manque un truc.

    Merci.

  2. #2
    Membre actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 258
    Points
    258
    Par défaut
    Bonjour,

    Il faut faire interpréter les nouvelles balises par Dojo en faisant un appel au parser. Ici, après la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.byId("principal").innerHTML=doc;
    il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parser.parse("principal");
    Je me permets de faire une remarque : Dojo possède ses propres fonctions Ajax bien pratiques (http://dojotoolkit.org/documentation...ials/1.7/ajax/)

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Pas mieux même en passant avec l'exemple ...
    Le javascript fonctionne bien mais la page n'est pas interprétée.
    Du coup mes onglets ne sont pas 'rendus'

    J'ai mis ça

    load: function(newContent) {
    dom.byId("principal").innerHTML = newContent;
    parser.parse("principal");
    },

    rhalalala
    une idée ?

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Ah ça marche presque
    En fait quand je clique sur le lien, le parsing ne se fait pas bien, je change d'onglet (sous firefox), je reviens sur mon onglet et c'est bon ...
    Humm....

  5. #5
    Membre actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 258
    Points
    258
    Par défaut
    peut être il faudrait appeler la méthode refresh ?

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Euh, c'est à dire ? tu peux développer stp ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Tiré d'un topic du même genre:

    load: function(response, ioArgs) {
    dojo.html.set("villeselection", response, { parseContent:true });
    return response;
    }
    Dans votre cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.byId("principal").innerHTML=doc;
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.html.set("principal",doc,{ parseContent:true });

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je suis confronté à un problème semblable mais avec une dijit.ProgressBar pilotée en push par un Zend_ProgressBar du Zend Framework. La dijit.ProgressBar apparaît bien mais elle ne progresse pas.
    Voici les codes

    Le point d'entrée qui appelle la dijit.ProgressBar via ajax (menu-index.phtml):
    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
    <script>
    function loadNewPage(temp) {
        dojo.xhrGet({ url:temp,
                      handleAs: "text",
                      load: function (response,args) {
                          dojo.html.set("rcol",response,{ parseContent:true, executeScripts: true });
                          return response;
                      }
     
        })
    }
    </script>
    <br /><br />
    <div id="view-content">
        <button dojoType="dijit.form.Button" data-dojo-props="onClick:function(){loadNewPage('/cuisine/Params/indexes');return false;}">Go</button>
        <div id="rcol"></div>
    </div>
    En cliquant sur le bouton, la page suivante (contenant la dijit.ProgressBar et un iframe caché contenant le traitement long) est appelée (indexes.phtml):
    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
    <script>
    function Zend_ProgressBar_Update(data)
    {
        dijit.byId('progression').update({progress:data.current});
    }
    dojo.addOnLoad(function() {
        dijit.byId('progression').update({maximum:10, progress:0});
        });
    </script>
    <br /><br />
    <div id="view-content">
        <div dojoType="dijit.ProgressBar" id="progression" style="width:300px;"></div>
     
        <iframe src="params/indexes2" id="long-running-process"></iframe>
    </div>
    Le traitement long fait partie d'un controlleur Zend (action indexes2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $adapter = new Zend_ProgressBar_Adapter_JsPush(array
                    ('updateMethodName' => 'Zend_ProgressBar_Update'));
    $progressBar = new Zend_ProgressBar($adapter, 0, 10);
    $i=1;
    while ($i<=10)
    {   
       $progressBar->update($i);
       sleep(1);                 // à remplacer par le code à exécuter
       $i++;
    }
    $progressBar->finish();
    Je suis conscient que c'est un peu complexe, voire même tordu ... le but est de lancer un traitement long dans une page après avoir cliqué sur un bouton en permettant à l'utilisateur de visualiser la progression, le tout sans changer de page.
    Merci d'avance pour vos réponses.

Discussions similaires

  1. [ZF 1.10] Ajax : Mettre à jour une div de index.phtml
    Par arsene555 dans le forum Zend Framework
    Réponses: 5
    Dernier message: 26/11/2010, 11h53
  2. [Prototype] Mettre à jour une div
    Par Furlaz dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 26/02/2009, 07h58
  3. Réponses: 4
    Dernier message: 07/08/2008, 15h10
  4. Réponses: 3
    Dernier message: 05/07/2008, 19h09
  5. Réponses: 3
    Dernier message: 18/07/2006, 17h37

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