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

AJAX Discussion :

[AJAX] Afficher une alerte dans la page appelante au retour d'un appel AJAX ?


Sujet :

AJAX

  1. #1
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut [AJAX] Afficher une alerte dans la page appelante au retour d'un appel AJAX ?
    Bonjour,

    dans mon formulaire de saisie, je veux faire un appel ajax à la place de la soumission par "action" de la balise <form>.
    Pour cela, j'ai fais un événement onclick() sur le bouton "Valider" qui appelle ma fonction d'ajax.

    au retour de l'appel, je fais un alert() mais il m'affiche l'alerte dans la page php qui était apellé par ajax or je veux que l'alerte soit dans la page appelante(de saisie).

    Le but c'est de dire au user si une insertion ou un champ doit être saisie( ce que je fais dans la page php, qui est dans le "open" de l'objet AJAX.

    les messages sont fait par "echo" dans la page php et je veux les faire par "alert" au retour dans ma page de saisie.

    Je pensais à un "innerHTML" mais je sais pas s'il est possible de l'appliquer sur une alerte au préalable déclaré.

    Comment je dois faire pour que l'alerte reste dans la page appelante ?

    Est-ce que l'appel de la fonction d'ajax doit se faire sur un événement onclick() du bouton de soumission "valider"(car y'a toujours aussi action="fichierPHP" dans la balise <form>.) ?

    Merci de vos aides.

    Cordialement

  2. #2
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Pour plus de précisions je vous livre mon code pour cela :

    Fonction qui gére le retout ajax
    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
    <script language="JavaScript">
     
    function retour_insertion()
    {
      //XMLHttpRequest est supporté par Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Netscape 7
      if(document.all) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
      else var XhrObj = new XMLHttpRequest(); //Mozilla
     
      //content = document.getElementById("pseudo_check"); 	//zone d'affichage
     
      XhrObj.open("POST", "valider_operations.php");
     
      //Ok pour la page cible
      XhrObj.onreadystatechange = function()
      {
        if (XhrObj.readyState == 4 && XhrObj.status == 200) {
                alert(XhrObj.responseText);
          } 
        }
     
    // Je recupére les valeurs des différents champs présents dans le formulaire 
     
    		valide = document.getElementById('valide');
    		sel = document.getElementById('Num_compte');
    		Num_compte =sel.options[sel.selectedIndex].value;
    		date_realise=document.getElementById('date_realise');
    		reference=document.getElementById('reference');
    		montant_realise=document.getElementById('montant_realise');
    		sel_cr = document.getElementById('code_cr');
    		code_cr =sel_cr.options[sel.selectedIndex].value;
    		fournisseur=document.getElementById('fournisseur');
     
     
     
     
      XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    // Envoi les différentes valeurs présentes dans le formulaire de saisie
      XhrObj.send("code_cr="+codecr,"valide="+valide,"Num_compte="+Num_compte,
      "date_realise="+date_realise,"montant_realise="+montant_realise,"reference="+reference,"fournisseur="+fournisseur);
     
    }
     
    </script>

    Code de mon fichier php ici valider_operations.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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
     
    if (isset($_POST['valide'])) 
    {
    if  ($_POST['Num_compte']!='-1' )
    {
      $trouve_moi  = '/';
      $position = strpos($_POST['date_realise'], $trouve_moi);
    if ($position == true) {
     
    if ( $_POST['montant_realise']!=null )  
    {
    if (isset($_POST['code_cr']) and $_POST['code_cr']!='-1')
    {
     
    $_montant_realise=$_POST['montant_realise'];
    $_date_realise=$_POST['date_realise'];
    list($jour,$mois,$annee) = explode('/',$_date_realise);
    $date_effect = $annee.'-'.$mois.'-'.$jour;
    $_num_compte=$_POST['Num_compte'];
    $_code_cr=$_POST['code_cr'];
    $_reference=$_POST['reference'];
    $_fournisseur=$_POST['fournisseur'];
     
    include('fonctions.php');
                        connect();
     
    $sql_insert='insert into 
    operations(montant_realise,date_realise,Num_compte,Code_cr,reference,fournisseur)
                     values('.$_montant_realise.',"'.$date_effect.'","'.$_num_compte.'"
                     ,"'.$_code_cr.'","'.$_reference.'","'.$_fournisseur.'")';
                     
    $result_insert=mysql_query($sql_insert) or die ('Erreur SQL !, vos informations n\'ont pas pu être enregistré dans la base de donnée'.$sql_insert.'<br />'.mysql_error());
                     
                     
                     
                     
                    if($result_insert)
      {
        echo 'L\'operation a été bien enregistrée' ;
      }
                     
     
    }
     
    else
    {
    echo 'Vous avez oublié de saisir le Code CR';
     
    }
    }
     
    else
    {
    echo 'Vous avez oublié de saisir le Montant';
     
    }
    }
     
    else
    {
    echo 'Vous avez oublié de saisir la date';
     
    }
    }
     
    else
    {
     echo 'Vous avez oublié de saisir le Numéro de Compte';
     
     }
     
     }
     
    ?>
    ma page de saisie :

    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
    <form name="test" action="valider_operations.php" method="post" >
       <fieldset><legend>OPERATION DE CHARGES</legend>
     
       	<table border="0" align="center">
     
    --------les champs de siaise-----------------
     
    					<tr align="center">
    					<th>Date_Operation</th>
    					<td align="center">
    					<input type="text" id="date_realise" name="date_realise"/>
     
     </td>
    										</tr>
     
     
    									<tr align="center">
    										<th>Montant Operation</th>
    			<td align="center"><input class="numeric" type="text" name="montant_realise" id="montant_realise" /></td>
    					</tr>
    <tr>
     
    		<td colspan="2" align="center"><input type="submit" name="valide" value="Enregistrer" onclick()="retour_insertion();"></td>
     
     
    					</tr>
    					</table>
    					</fieldset>
     
     
    		</form>
    Voilà au lieu d'avoir une alerte en restant dans la page de saise, ça me redirige vers la page php avec les "echo" affichés.

    J'appelle la fonction ajax à la suite de l'evenement "onclick()" sur le bouton "Enregistrer" du formulaire.

    Merci de vos aides là-dessus !

    Cordialement

  3. #3
    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

    XhrObj.send("code_cr="+codecr,"valide="+valide,"Num_compte="+Num_compte,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XhrObj.send("code_cr="+codecr+"&valide="+valide+"&Num_compte="+Num_compte....
    A+.

  4. #4
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    En fait j'ai corrigé la fonction d'appel mais ça m'affiche toujours rien.
    Je sais pas ou se situe encore le probléme .
    voici le code modifié :

    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
    <script language="JavaScript">
     
    function retour_insertion()
    {
      //XMLHttpRequest est supporté par Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Netscape 7
      if(document.all) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
      else var XhrObj = new XMLHttpRequest(); //Mozilla
     
      content = document.getElementById("pseudo_check"); 	//zone d'affichage
     
      XhrObj.open("POST","valider_operations.php",true);
        XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
      //Ok pour la page cible
      XhrObj.onreadystatechange = function()
      {
        if (XhrObj.readyState == 4 && (XhrObj.status == 200 || xhr.status == 0)) {
                 alert(XhrObj.responseText);
          } 
        }
     
    		valider = document.getElementById('valider');
    		sel = document.getElementById('Num_compte');
    		Num_compte =sel.options[sel.selectedIndex].value;
    		date_realise=document.getElementById('date_realise');
    		reference=document.getElementById('reference');
    		montant_realise=document.getElementById('montant_realise');
    		sel_cr = document.getElementById('code_cr');
    		code_cr =sel_cr.options[sel.selectedIndex].value;
    		fournisseur=document.getElementById('fournisseur');
     
     
     
     
     XhrObj.send("code_cr="+codecr+"&valider="+valider+"&Num_compte="+Num_compte+"&montant_realise="+montant_realise+"&date_realise="+date_realise+"&reference="+reference+"&fournisseur="+fournisseur);
     
    }
     
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form>
    <input type="button" name="valider" value="valider" onclick=" retour_insertion()"; />
     
    </form>
    quand je clique sur le bouton j'ai pas encore d'alerte.
    j'ai créé une bouton normale aulieu d'un boutonn "submitt" .
    Si j'ai la réponse, il me faudra adapter ça au bouton "submitt".

    Merci de votre aide !

  5. #5
    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
    1- Je ne sait pas comment tu travailles mais dans ce post, tu as une charmante fonction qui instancie une variable xhr, mais dans cette discussion, ça me fait .

    2- tu dois récupérer les valeurs avec l'attribut value pour les input.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    valider = document.getElementById('valider').value;
    ...
    date_realise=document.getElementById('date_realise').value;
    ....

    A+.

  6. #6
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Merci bon ça marche. c'est vrai que j'aurai du utiliser l'instancitaion de l'objet faite en haut avec un avec ce 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
    function inserer_compte()
    {
      //XMLHttpRequest est supporté par Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Netscape 7
      var xhr = getXhr();
     
      content = document.getElementById('pseudo_check'); 	//zone d'affichage
     
      xhr.open("POST","valider_operations.php",true);
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
      //Ok pour la page cible
      xhr.onreadystatechange = function()
      {
        if (xhr.readyState == 4 && xhr.status == 200) {
                 alert(xhr.responseText);
          } 
        }
     
     
    		sel = document.getElementById('Num_compte');
    		Num_compte =sel.options[sel.selectedIndex].value;
    		date_realise=document.getElementById('date_realise').value;
    		reference=document.getElementById('reference').value;
    		montant_realise=document.getElementById('montant_realise').value;
    		sel_cr = document.getElementById('code_cr');
    		code_cr =sel_cr.options[sel.selectedIndex].value;
    		fournisseur=document.getElementById('fournisseur').value;
     
     
     
     
     xhr.send("code_cr="+code_cr+"&Num_compte="+Num_compte+"&montant_realise="+montant_realise+"&date_realise="+date_realise+"&reference="+reference+"&fournisseur="+fournisseur);
     
    }
    Maintenant mon problème est que j'ai une alerte avec une bouton normale ( déclaré avec type="button") mais pas avec une bouton déclaré avec type="submitt".

    or si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="test" action="valider_operations.php"  method="post" >
    <input type="submit" name="valide" value="Enregistrer"
     onclick=" inserer_compte()";/>
    </form>
    Il me redirige vers la page "valider_operations.php".

    Comment lui faire comprendre que même en cliquant sur le bouton "submitt" du formulaire, je veux rester dans la même page?

    Cordialement.

  7. #7
    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
    Pourquoi utiliser un bouton submit si tu ne veux qu’appeler une fonction javascript

    Sinon
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="submit" name="valide" value="Enregistrer"
     onclick=" inserer_compte(); return false;"/>

  8. #8
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Merci ça marche parfaitement.

    mais on peut pas enlever le message se trouvant au dessous du message retourné : "Empêcher cette page d'ouvrir des dialogues supplémentaires" ?

  9. #9
    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
    Citation Envoyé par madina Voir le message
    mais on peut pas enlever le message se trouvant au dessous du message retourné : "Empêcher cette page d'ouvrir des dialogues supplémentaires" ?
    ça c'est la configuration de ton navigateur, tu ne pourras pas l’empêcher avec javascript.

    A+.

  10. #10
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Ah ok je vois.

    En fait dans les messages retournés par l’appel ajax , je veux si le message correspond à :

    'L\'operation a été bien enregistrée' : afficher une alerte avec un message additionnel Voulez-vous saisir un nouveau enregistrement ? et deux boutons Oui et Non.

    pour en cas ou l'utilisateur appuie sur le bouton Oui, effacer tous les champs du formulaire.

    Comment je peux faire ?

    je pense à comparer directement avec les différents message et au cas ou faire une alerte à deux ou un bouton mais je doute que c'est pas très propre.

    s'il y' a une suggestion pour réaliser cela ?

    Cordialement.

  11. #11
    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
    Je ne pense pas qu'un alert suivie d'une boite de confirmation soit très esthétique qu'un simple affichage d'un div avec le mot.
    Pour la boite de confirmation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(confirm("Voulez-vous saisir un nouveau enregistrement ?")){
       document.getElementById("idDuFormulaire").reset();
    }
    A+.

  12. #12
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Ok je vois mais le confirm(), je dois l'afficher que si la chaine retournée est : L'enregistrement a été bien effectué.

    En fait je dois vérifier si la chaine retournée est : L'enregistrement a été bien effectué. Afficher :
    L'enregistrement a été bien effectué.
    Voulez-vous ajouter un enregistrement ?


    dans les autres cas, je mets une simple alerte.

    Donc je dois comparer la réponse texte retournée avec les différents différentes textes qui apparaissent des les "echo" de ma page php.

    Y'a t-il une fonction permettant de le faire ?

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(xhr.responseText=="L'enregistrement a été bien effectué."){
      if(confirm("...")){
     
    }
    }
    Mais n'utilise pas une longue phrase mais un simple mot comme "OK" ou "KO" suffi.
    Sinon, je ne comprend pas ce que tu veux.

    A+.

  14. #14
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Merci je vois bien.

    En fait j'ai mis comme chaine retournée "OK" s'il y'a bien eu insertion

    et dans ma fonction j'ai mis

    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
    xhr.onreadystatechange = function()
      {
        if (xhr.readyState == 4 (&& xhr.status == 200 ) {
     
    		leselect = xhr.responseText;
    	            //content.innerHTML=xhr.responseText;
    				if (leselect == 'OK'){
     
                     //if (confirm("L'operation a ete bien enregister")){
    				 //document.getElementById('Num_compte').reset();
    				 //document.getElementById('montant_realise').reset();
    				alert("L'operation areussi");
    				 }
     
     
     
     
    	  else
    	  {
    	  alert(leselect);
    	  }
        }
    	}
    Mais ça fonctione plus, ça me redirige vers la page php.

    Quel est le problème à ce niveau ?

  15. #15
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    ça marche

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

Discussions similaires

  1. Afficher une liste dans des pages différentes
    Par B.M.W83 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 05/01/2018, 16h53
  2. Réponses: 3
    Dernier message: 22/07/2012, 22h16
  3. Afficher Une Date Dans la Page
    Par matoma16 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/08/2007, 18h50
  4. Lien permettant d'afficher une image dans la même page
    Par mouna201 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/02/2007, 10h31
  5. Comment afficher une vidéo dans une page HTML ???
    Par safadev dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/10/2005, 19h50

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