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 :

redirection après requête AJAX


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut redirection après requête AJAX
    Bonjour tout le monde

    Je viens vers vous car je tombe sur un souci, j'utilise en grande partie ajax ( sans framework ) et j'ai besoin de faire une redirection après une identification utilisateur ( login )

    Contexte :
    lors d'un clic, un div est affiché en position absolu lui même allant chercher le formulaire d'identification ( login, password ), j'utilise ajax pour envoyer ce formulaire ( login.php ), qui renvoi un message de confirmation ou d'erreur, si identification confirmer renvoi "Vous êtes maintenant identifier" sinon retourne l'erreur

    Si confirmation j'aimerai rediriger l'utilisateur ver la page membre, pour ce faire j'inclus un script JS dans le retour

    Sinon il affiche l'erreur et réafiche le formulaire d'identification

    Le code :

    requête ajax (xhr.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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    // fonction simplifiant la création d'un objet XMLHttpRequest
    // Compatible IE et GECKO
    function Xhr(){
      // Mozilla/Safari
      if(window.XMLHttpRequest){ return new XMLHttpRequest(); }
      // IE
      else if(window.ActiveXObject){ return new ActiveXObject("Microsoft.XMLHTTP"); }
      // Erreur
      else{
        alert('Votre navigateur ne supporte pas XHR, veuillez activer Javascript dans les options de votre navigateur');
      }
    }
     
    // Fonction qui va envoyer une requête serveur vers le fichier ciblé,
    // récupérer le retour et l'ecrire dans la cible 
    function getXhr(fichier,string,DivId){
      // On cible le div contenaire
      var Cible = document.getElementById(DivId);
      // On insère une image en guise de chargement
      Cible.innerHTML = '<div id="load" style="display:block;width:150px;margin:20px auto;text-align:center;">Chargement en cours</div>';
      // On crée le nouvel objet XMLHttpRequest
      var NewSelf = Xhr();
      // On ouvre une requete avec la méthode POST vers le fichier ciblé
      NewSelf.open('POST',fichier, true);
      // On déclare le header pour l'envoi via POST ( pseudo formulaire )
      NewSelf.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      // On définit la fonction de procédure pour la réponse
      NewSelf.onreadystatechange = function() {
        // Si le statut de la requête est égal à 4
        if(NewSelf.readyState == 4) {
          // On masque l'image du chargement
          document.getElementById('load').style.display = 'none';
          // On écris le résultat de la requete dans le div ciblé
          var retour = NewSelf.responseText;
          Cible.innerHTML = NewSelf.responseText;
        }
      };
      // Et on envoi la requête, avec paramètre ( string = liste des variables )
      NewSelf.send(string);
    }
     
    function sendLogin(){
      var login = document.getElementById('minLog').value;
      var passw = document.getElementById('minPass').value;
      getXhr('index.php','page=User&epage=login&ajax=1&login='+login+'&passw='+passw,'formSpeed');
    }
    le bouton d'envoi du formulaire sur le formulaire login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<input type="button" id="sendForm" value="Envoyer" onclick="sendLogin();" />';
    le fichier login.php
    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
     
    if(isset($_POST['ajax'])){
      $close = "<img src=\"Img/forms/close.png\" alt=\"Fermer\" style=\"float:right;margin-top:-5px;cursor:pointer;\" onclick=\"hideEl('formSpeed');\" onmouseover=\"this.src='Img/forms/closeF.png';\" onmouseout=\"this.src='Img/forms/close.png';\" />";
      openForm($close . "Identification");
      //echo $_POST['login'] . " = " . $_POST['passw'];
      if(isset($_POST['login']) && isset($_POST['passw'])){
        $check = $user->login($_POST['login'],$_POST['passw']);
        if($check == 1){ 
          echo utf8_encode("Vous êtes maintenant identifier");
          unset($_SESSION['user']);
          $_SESSION['user'] = $user;
          // ICI LA REDIRECTION
          redirect('Member.php',2);
        }
        else{
          if($check == 0){ echo utf8_encode("Identifiant ou mot de passe incorrect"); }
          elseif($check == 2){ echo utf8_encode("Vous n'avez pas valider votre inscription"); }
          else{ echo utf8_encode("Vous devez remplir vos informations personnelles"); }
        }
      }
      else{
        echo utf8_encode("Vous n'avez pas fournit vos identifiant");
      }
      closeForm();
     
      if($check <> 1){
        include('Mods/User/minLog.inc.php');
      }
    }
    else{
      echo "Erreur";
    }
    et enfin la fonction redirect() PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function redirect($url, $tps){
      $temps = $tps * 1000;
     
      echo "<script type=\"text/javascript\">\n"
         . "\n"
         . "function redirected(){\n"
         . "window.location = '" . $url . "';\n"
         . "}\n"
         . "setTimeout('redirected()','" . $temps ."');\n"
         . "\n"
         . "</script>\n";   
    }
    Le problème : L'identification fonctionne très bien ( j'ai bien le message de confirmation qui s'affiche, un var_dump de l'objet $user dans le message de retour me retourne bien les information membre, je suis donc bien identifier )

    mais voilà aucune redirection ne se produit et je n'arrive pas à comprendre d'ou viens le problème

    j'ai essayer avec
    - window.location.href
    - window.location.replace()

    Mais toujours aucune redirection, plusieur personne m'ont recommander d'utiliser un framework comme "JQuery" et autres en m'argumentant "pourquoi réinventer la roue", mais mon but est justement de comprendre le rouage et pas simplement l'utilisé, certe c'est réinventer la roue mais c'est à titre instructif ce qui me semble être un très bon arguments, m'enfin là je sèche

    J'ai essayer de déboguer avec l'outil firebug de FF, et il ne me retourne aucune erreur javascript, dans le tracage de la requête ajax, le retour me retourne bien le message de confirmation et le script JS avec la bonne URL de redirection. Idem lors de l'inspection des élément le script JS est bien présent dans la source, je ne voi donc vraiment pas pourquoi ca ne marche pas

    La source (valeur de retour de la requête ajax fournie par firebug) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Vous êtes maintenant identifier
    <script type="text/javascript">
    function redirected(){
    window.location = 'Member.php';
    }
    setTimeout('redirected()','2000');
    </script>
    d'avance merci de votre aide, et désolé du roman mais je pense qu'il vaut mieux bien expliquer dès le début.

    Cordialement

    EDIT : J'ai essayer de mettre un simple alert(); et l'alerte n'est pas déclenchée non plus donc je pense je doit faire une grosse erreur quelque part, pourtant présent de la source et toujours aucunes erreur JS

    function redirect()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function redirect($url, $tps){
      $temps = $tps * 1000;
     
      echo "<script type=\"text/javascript\">\n"
         . "\n"
         . "function redirected(){\n"
         . "window.location = '" . $url . "';\n"
         . "alert('tu va être rediriger vers : " . $url . "');\n"
         . "}\n"
         . "setTimeout('redirected()'," . $temps .");\n"
         . "\n"
         . "</script>\n";   
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    C'est expliqué dans cet article: Comprendre les mécanismes d'AJAX

    A+.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    autant pour moi, c'est pas possible

    j'ai donc créer un xhr pour les redirection en fonction de la réponse, je place dans la réponse un div en hidden avec le mot [CHECK], si je trouve ce mot dans la réponse je fait alors la redirection, et ca marche nikel

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

Discussions similaires

  1. [AJAX] Réponse après requête ajax
    Par bisvan dans le forum AJAX
    Réponses: 2
    Dernier message: 10/12/2009, 17h08
  2. plus de javascript aprés requéte ajax pour mon menu
    Par pouktoro dans le forum jQuery
    Réponses: 2
    Dernier message: 23/10/2009, 13h44
  3. [MySQL] problème de redirection après requête
    Par bromlecornu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/05/2007, 10h17
  4. [MySQL] redirection après requête
    Par djinko dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/03/2006, 11h13

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