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] Ajax et window.location.replace


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut [AJAX] Ajax et window.location.replace
    Bonjour,

    Je rencontre un problème avec l'utilisation de la fonction window.location.replace() suite à une mise à jour du contenu d'un div avec de l'Ajax.

    Je m'explique : j'affiche une interface appelée dossier.inc (fichier qui est passé en paramètre à ma classe CInterface, mais cela n' a pas d'importance). Ce fichier contient plusieurs div dont, lors du premier affichage, le diplay est à none. Sur le onclick d'une image, je passe le display du div concerné à block et y affiche de l'information contenant elle-même des liens vers d'autres interfaces.

    Lorsque je clique sur un de ces liens, j'affiche alors l'interface concernée qui contient elle-même un lien appelé "Retour" dans lequel j'utilise la fonction javaScript window.location.replace(). Cette fonction me permet bien de réafficher le fichier "dossier.inc" mais (évidemment car recharge l'interface) avec tous les div avec le display à none.

    Comment faire pour que les div dont j'ai passé le display à block reste affichés lorsque je réaffiche l'interface "dossier.inc"? Impossible d'utiliser history.back à cause des variables de session.

    Voici ce que donne le code :

    - dans "dossier.inc" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo "<div  class='floatLeft7'>&nbsp;</div>
          <div class='floatLeft5'>&nbsp;</div>
          <div class='floatLeft5' id='boutonAtt$suffixe'><img src='../images/plus.gif' border='0' align='middle' onclick='listeFctAtt($suffixe);'></div>
          <div class='floatLeft40' align='left'>Fonctions attentionnelles</div>
          <div class='floatLeft25'>&nbsp;</div>
          <div class='floatLeft10'>&nbsp;</div>
          <div class='floatLeft7'>&nbsp;</div>
          <div id='divAttention$suffixe' style=\"display='block';\"></div>";
    - dans ma fonction Ajax listeFctAtt($suffixe) :

    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
    function listeFctAtt(suffixe)
     {
      {
       xhrListeFctAtt=getXhr();
       xhrListeFctAtt.onreadystatechange = function()
        {
         if(xhrListeFctAtt.readyState == 4 && xhrListeFctAtt.status == 200)
          {
           document.getElementById("divAttention" + suffixe).innerHTML = xhrListeFctAtt.responseText;
           document.getElementById("boutonAtt" + suffixe).innerHTML = "<img src='../images/moins.gif' border='0' align='middle' onclick='videFctAtt(" + suffixe + ")'>";
           document.getElementById("divAttention" + suffixe).style.display = 'block';
          }
        }
       xhrListeFctAtt.open("POST",'../transferts/majDossier/listeFctAtt.php',true);
       xhrListeFctAtt.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
       xhrListeFctAtt.send("suffixe=" + suffixe);
      }
     }
    -dans mon fichier listeFctAtt.php appelé par ma fonction

    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
    <?php
    session_start();
    header('Content-Type: text/html; charset=utf-8');
    require("../../fichiersInclusion/classes.php");
    $suffixe = $_POST['suffixe'];
     
    $tabAttention = unserialize($_SESSION["tabAttention$suffixe"]);
    $nb = count($tabAttention);
     
    for($cpt = 0; $cpt < $nb; $cpt++)
     {
       $tabDonnees = $tabAttention[$cpt]->getAll();
       
       echo "<div  class='floatLeft7'>&nbsp;</div>
          <div class='floatLeft5'></div>
          <div class='floatLeft10'>&nbsp;</div>
          <div class='floatLeft25'><img src='" . $tabDonnees['icone'] . "' border='0' align='middle'>&nbsp;&nbsp;&nbsp;" . $tabDonnees['dateEve'] . "</div>
          <div class='floatLeft25' onDblClick=\"window.location.href='../transferts/affEve.php?tableau=tabAttention$suffixe&index=$cpt'\">" . $tabDonnees['titre'] . "</div>     
          <div class='floatLeft27'>" . $tabDonnees['prestataire']. "</div>";
     }
    ?>
    - dans mon fichier affEve.php appelé par le précédent script :

    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
    <?php
    require("../fichiersInclusion/classes.php");
    session_start();
     
    if(isset($_GET['nbPere']) && isset($_SESSION['tabObj']))
     {
      $nbPere = $_GET['nbPere'];
      $tabObj = unserialize($_SESSION['tabObj']);
      $obj = $tabObj[$nbPere][0];
     }
    elseif(isset($_GET['tableau']) && isset($_GET['index']))
     {
      $tableau = $_GET['tableau'];
      $index = $_GET['index'];
      $tab = unserialize($_SESSION[$tableau]);
      $obj = $tab[$index];
     }
     
     
    $_SESSION['objet'] = $obj;
     
    $interface = new CInterface($obj->getTitre(), $obj->getFichier(), 1, "");
    $interface->getHeader();
    $interface->getLogo();
    $interface->getTitre();
    $interface->getMenu();
    $interface->getContenu();
    $interface->getSignature();
     
    ?>
    - dans ma classe d'interface CInterface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href='javascript:window.location.replace(\"http://localhost/psy/transferts/accDoss.php?nb=0\")'>Retour</a>
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Je viens tout de même d'utiliser history.back au lieu de window.location.replace(), mais le comportement est identique...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Je viens également d'essayer d'utiliser document.referrer mais cela m'affiche alors "http://localhost/psy/transferts/accDoss.php?nb=0"

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "\n    <tr id='trmenu'>
    	                  <td id='tdmenu'>
    	                   <A href='javascript:document.referrer'>Retour</A>
    	                  </td>
    	                 </tr>";

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    En essayant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "\n    <tr id='trmenu'>
    	                  <td id='tdmenu'>
    	                   <A href='" . $_SERVER['HTTP_REFERER'] . "'>Retour</A>
    	                  </td>
    	                 </tr>";
    cela a le même effet que history.back

    Je sèche....

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Il faudrait que l'url de ta page qualifie le contenu, c'est à dire qu'il y aie
    une information dont tu te sert pour initialiser l'état d'affichage de tes divs.

    supposons que tes divs aient des id, par exemple, id1, id2, id3, id4

    tu pourrais avoir des urls pour ta page du genre:

    page.php?div=id2,id4
    ou
    page.php#id2,id4

    et à l'initialisation de ta page tu extrait l'information de l'url en javascript
    et tu fixe le display de tes divs en fonction.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci énormément pour ton aide...

    Alors, j'arrive, via un champ hidden, à identifier si mon div est à display none ou block. Mais, vu que mon nombre de div est variable, je ne vois pas comment faire passer en $_GET tous ceux en display block.

    En clair, le code suivant est inclu dans une boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo "<div class='floatLeft7'>&nbsp;</div>
          <div class='floatLeft5'>&nbsp;</div>
          <div class='floatLeft5' id='boutonMem$suffixe'><img src='../images/plus.gif' border='0' align='middle' onclick='listeMem($suffixe);'></div>
          <div class='floatLeft40' align='left'>Mémoire</div>
          <div class='floatLeft25'>&nbsp;</div>
          <div class='floatLeft10'>&nbsp;</div>
          <div class='floatLeft7'><input type='hidden' id='etatDivMem$suffixe' value='0'></div>
          <div id='divMem$suffixe'></div>";
    La value de mon champ 'etatDivMem$suffixe' est à 1 lorsque le div est à display block.

    La variable $suffixe est égale au compteur de ma boucle + 1. Donc, je peux me retrouver avec x div (de trois types différents qui plus est : divAttention$suffixe, divExec$suffixe ou 'divMem$suffixe) à faire passer dans mon url. De quelle manière puis-je faire cela?

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

Discussions similaires

  1. Url sous forme de variable dans window.location.replace
    Par sat99 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/07/2014, 14h43
  2. remplacer window.open par window.location.replace
    Par serna dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/12/2009, 17h06
  3. [Prototype] Ajax.Updater et window.onload
    Par fongus dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 22/08/2008, 21h28
  4. [AJAX] Compatibilite Ajax Internet explorer window.document.getElementById
    Par vinczente dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/06/2008, 09h49
  5. [Internet Explorer] window.location.replace ne fonctionne pas
    Par Gat- dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/02/2007, 13h15

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