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] Formulaire, Ajax et IE


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut [AJAX] Formulaire, Ajax et IE
    Bonjour à tous,

    J'ai un problème à envoyer une requête AJAX avec IE (toutes versions confondues). Je veux vérifier un captcha en AJAX et s'il n'est pas bon, une alerte, un rafraîchissement du captcha et on n’envoie pas le formulaire. À tous les coups, après toutes les vérifications, le formulaire s'envoie même s'il n'y a rien dans le champ captcha. Ceci étant dit, avec FF et Opera tout fonctionne à merveille.

    Voici mes bouts de code :

    Code Javascript : 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
    function ajax(fichier, getdata, sync){
      if(sync == null){sync=true;}
      if(window.XMLHttpRequest) // FIREFOX
          xhr_object = new XMLHttpRequest(); 
      else if(window.ActiveXObject) // IE
          xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
      else 
          return(false);
      xhr_object.open("GET", fichier + '?nocache=' + Math.random() + "&" + getdata, sync);
      xhr_object.send(null);
      return xhr_object;
    }
     
    function verifierForm(formObj,lang){
      if(trim(formObj.contactName.value) == ''){
        alert(messageTexte['nom'+lang]);
        focusAndSelect(formObj.contactName);
        return false;
      }
      ajaxObj = ajax('include/ajax-check-captcha.php','captcha=' + formObj.contactCaptcha.value,false);
      alert('ici1');
      if(ajaxObj.responseText != 'ok'){
        alert('ici2');
        alert(messageTexte['captcha'+lang]);
        refreshCaptcha();
        focusAndSelect(formObj.contactCaptcha);
        return false;
      }
      sendMail(formObj,lang);
      return false;
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $output .= '<form name="contactForm" action="donothing.php" method="post" enctype="multipart/form-data" onsubmit="return verifierForm(this,\'fr\')">
      <table>
        <tr><td style="text-align:right;">Votre nom : </td><td><input style="width:250px;" type="text" name="contactName" /></td></tr>
        <tr><td style="text-align:right;">Votre adresse courriel : </td><td><input style="width:250px;" type="text" name="contactEmail" /></td></tr>
        <tr><td style="text-align:right;">Le sujet de votre demande : </td><td><input style="width:250px;" type="text" name="contactSubject" /></td></tr>
        <tr><td style="text-align:right;vertical-align:top;">Votre message :</td><td><textarea style="width:250px;" name="contactMessage"></textarea></td></tr>
        <tr><td style="text-align:right;vertical-align:top;"><img src="captcha.php?nocache='.time().'" alt="Captcha" id="captcha" /></td><td style="vertical-align:top;"><input style="width:100px;" type="text" name="contactCaptcha" /> Rafraichir le code <a href="javascript:refreshCaptcha()"><img src="images/refresh.png" align="top" /></a></td></tr>
        <tr><td style="text-align:right;vertical-align:top;">&nbsp;</td><td style="text-align:right;"><input style="width:150px;" type="submit" value="Envoyer" name="contactSubmit" /></td></tr>
      </table>
    </form>';

    À noter que le alert('ici1') s'affiche mais pas le 2... Donc c'est là que ça coince. Le fichier donothing.php n'existe pas puisque la fonction sendMail envoie le courriel via AJAX.

    C'est la première fois que j'ai ce genre de problème puisque j'ai déjà utilisé et j'utilise encore cette façon de faire.

    Merci
    TigerCX

  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
    Par défaut
    Bonjour,
    alert('ici1');
    if(ajaxObj.responseText != 'ok'){
    alert('ici2');
    Essaie de faire alert(ajaxObj.responseText) et alert(ajaxObj.responseText.length) pour vérifier. Quel est l' encodage de tes fichiers?
    Pourquoi retourner "xhr_object" mais pas "xhr_object.responseText" dans la fonction?

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    Essaie de faire alert(ajaxObj.responseText) et alert(ajaxObj.responseText.length) pour vérifier. Quel est l' encodage de tes fichiers?
    Pourquoi retourner "xhr_object" mais pas "xhr_object.responseText" dans la fonction?
    Tout est en utf-8.

    Si je retourne l'objet plutôt que juste le texte c'est parce que je souhaite y aller asynchrone et dans ce cas je dois travailler l'objet. Je vais tester mon texte retour avant de le mettre dans une condition.

    Réponse plus tard car je suis sur mon iPod.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    header('Content-type: text/html; charset=uft-8');
    include "inc-functions.php";
    if(hashPassword(strtoupper($_GET['captcha'])) == $_SESSION['captcha']) exit('ok');
    exit('error');
    ?>

    Voilà mon erreur. Elle était située dans mon fichier ajax-check-captcha.php. Voyez-vous l'erreur ? charset=uft-8

    Incroyable mais vrai, c'était très difficile à trouver mais maintenant je le sais, IE est très sensible à ce genre de détail !

    Merci de votre aide !
    J'espère que ça va aider certaines personnes si elles se butent au même problème.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/11/2010, 09h18
  2. [AJAX] Formulaire AJAX PHP
    Par skins dans le forum AJAX
    Réponses: 1
    Dernier message: 02/09/2010, 12h26
  3. [AJAX] formulaire + ajax
    Par noobyyy dans le forum AJAX
    Réponses: 23
    Dernier message: 05/02/2010, 18h46
  4. [AJAX] formulaire ajax dans une fenetre ajax
    Par lolodev dans le forum AJAX
    Réponses: 1
    Dernier message: 14/01/2010, 01h30
  5. [AJAX] Formulaire AJAX
    Par tottotte dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/02/2009, 21h51

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