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 ou majax le magicien ?


Sujet :

JavaScript

  1. #1
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut [AJAX] ajax ou majax le magicien ?
    un phénomène interessant mais que je ne m'explique pas...
    tout fonctionne si je fais :
    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
     function submitForm(){
            var req = null; 
            if(window.XMLHttpRequest) //firefox
                req = new XMLHttpRequest(); 
            else if (window.ActiveXObject) //IE
                req  = new ActiveXObject(Microsoft.XMLHTTP); 
     
            req.onreadystatechange = function(){ 
     
                if(req.readyState == 4)
                {
                    if(req.status == 200)
                    {
                        alert(req.responseText)
                    }    
                    else    
                    {    
                        alert("error")
                    }    
                } 
            }; 
     
            req.open("GET", "foo.php", true); 
            document.write("test<br>"); 
            req.send(null);
     
        }
    mais rien ne va plus si à la fin j'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    req.send(null);
    document.write("Started...<br>");
    j'avais mis le document.write juste pour tester mon script, mais voilà que si il se trouve après l'envoi (req.send(null)), ça ne fonctionne plus! Pourtant je ne vois pas en quoi il est essentiel au script!

    merci d'avance pour vos conseils eclairés

    julien

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par julien.63
    j'avais mis le document.write juste pour tester mon script, mais voilà que si il se trouve après l'envoi (req.send(null)), ça ne fonctionne plus! Pourtant je ne vois pas en quoi il est essentiel au script!
    document.write = caca.

    A eviter absoluement, ça fait des trucs pas nets.

    Dans ton cas, je suppose que ça fait des changements au document, qui font perdre l'objet XHR au navigateur.... Enfin, quelque chose comme ça.

    La seule conclusion, ne pas utiliser de document.write.

  3. #3
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    Oui j'aimerai bien m'en passer, mais si je le supprime de ma fonction elle ne marche plus ! c'est ça que je trouve bizarre.
    Le reste de ma page est des plus simples. C'est un simple formulaire. Il n' y pas de javascript.
    Pourquoi quand j'efface ce "document.write" ou que je le mets après le "send", ça ne fonctionne plus?
    Julien

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    à mon avis, ton système est mal conçu: vérifie le gestionnaire d'événement et, si possible, dis-nous ce que tu veux obtenir comme résultat;

  5. #5
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    Je veux juste que req.responseText contienne ce que renvoie ma page foo.php. Pour l'instant c'est un simpe echo sans aucun accès à une bdd.

    Qu'est ce que tu appelles le gestionnaire d'événements?

    Julien

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    le formulaire, stp?

  7. #7
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    voici même toute la page.

    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="file:///C|/Program%20Files/EasyPHP1-8/www/DEV_HTML/ajax/class.css">
    <script language="JavaScript">
        function submitForm(){
            var req = null; 
     
            if(window.XMLHttpRequest) //firefox
                req = new XMLHttpRequest(); 
            else if (window.ActiveXObject) //IE
                req  = new ActiveXObject(Microsoft.XMLHTTP); 
     
            req.onreadystatechange = function(){ 
                if(req.readyState == 4)
                {
                    if(req.status == 200)
                    {
                        alert(req.responseText)
                    }    
                    else    
                    {    
                        alert("error")
                    }    
                } 
            }; 
     
            req.open("GET", "foo.php", true); 
            document.write("test<br>"); 
            req.send(null);        
        } 
        </script>
     
    <title>AJAX TEST</title>
    </head>
     
    <body>
    <p>
    <form action="" method="post" name="formulaire" onSubmit="submitForm()">
    <input class="myclass" value="afficher" type="submit">
    </form>
    </p>
    <P>
    <div name="calque"></div>
    </P>
    </body>
    </html>
    julien
    ps: ça m'interesse de savoir ce que c'est le gestionnaire d'evenements, ça pourra surement m'aider pour ce problème ou d'autres à venir.

  8. #8
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par julien.63
    voici même toute la page.
    Tout ça, c'est bien sur un serveur web? Ta page php appellée, elle marche si tu l'appelles toute seule?

  9. #9
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    oui c'est bien sur un serveur web, c'est promis

    http://striweb.si.edu/databases/file...admin/ajax.php

  10. #10
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    si ta fonction ne retourne pas false, le formulaire sera soumis par la voie classique, à mon avis;

  11. #11
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    je suis désolé, mais c'est pas très clair.

    Comment savoir si la fonction retourne false?

    C'est quoi la voie classique? Quand on soumet directement le formulaire sans fonction javascript et qu'on recharge la page?

    julien

  12. #12
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par julien.63
    Quand on soumet directement le formulaire sans fonction javascript et qu'on recharge la page?
    oui, précisément;
    tu auras compris que ce que tu nommes "ajax" envoie (éventuellement) des données au serveur et en récupère (éventuellement) sans que l'uri en cours ne change; eh bien si ton formulaire retourne "true" - valeur par défaut -, ce système est courtcircuité;

    bref, place return false en fin de fonction et voie si ça change quelque chose;

  13. #13
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    bah, non ça ne change rien.
    Mais c'est vrai qu'à bien y regarder, j'ai l'icone de chargement de mozilla qui tourne comme quand une page se charge (d'ailleurs elle ne s'arrête pas comme si elle attendait des données). Pourtant mon url ne change pas et j'ai bien les données qui s'affiche venant de ma page foo.php.

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 77
    Points : 463
    Points
    463
    Par défaut
    Ca n'a pas un rapport avec ce bug de Mozilla/Firefox : http://www.quirksmode.org/blog/archi...notes_a_1.html ?

    Car en faite moi aussi j'ai eu un problème du genre. Si j'enlevais l'alert() ou l'écriture dans un div, avant d'envoyer les données avec send(), ça ne fonctionnait pas.
    Par contre si je laissais une action avant, ça fonctionnait.

  15. #15
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par julien.63
    bah, non ça ne change rien.
    J'ai repris tes pages et fait de très légeres modifs, et ça marche sous IE/FFX/Opera:
    http://dcabasson.developpez.com/test/testXHRMoz.html

    J'ai viré le document.write, déplacé le return false et rajouté un MIME-TYPE pour foo.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    header('Content-type','text/plain');
    echo 'julien test ajax et php';
    ?>
    Si ça marche chez toi, c'est qu'un de ces 3 points devait bloquer la chose. Probablement le document.write

    PS: dernière modification, j'ai changé l'instanciation de XHR sous IE, parceque ça ne marchait pas chez moi...

  16. #16
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    merci,
    j'ai récupéré le code source de ta page et fait les modifs dans le fichier foo.php.

    a moi maintenant de compliqué un peu l'affaire pour afficher autre chose qu'une pauvre petite alert...

    A+
    julien

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

Discussions similaires

  1. [AJAX] Ajax et les caractères spéciaux
    Par Moloc'h dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/01/2006, 14h02
  2. [AJAX] Ajax ne réactualise pas le javascript ?
    Par shadowbob dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/01/2006, 08h26
  3. [AJAX] Ajax et les accents
    Par nico-pyright(c) dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/12/2005, 20h09
  4. [AJAX] Ajax et javascript contenu
    Par zekey dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/09/2005, 20h16
  5. [AJAX] AJAX et javascript
    Par spud5351 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/09/2005, 10h16

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