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] Firefox et onreadystatechange


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut [AJAX] Firefox et onreadystatechange
    Bonjour,

    Cela fait quelques heures que je me casse la tête sur un problème avec ajax et je ne trouve pas de solution...

    Ce que j'ai fait fonctionne correctement avec IE mais pas avec Firefox...

    voici le 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
    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
    76
    77
    78
    79
    80
    function criarRequest() {
    
        var obj_XHR = false;
    
        if (window.XMLHttpRequest) {
            // Firefox, Mozilla, Safari,...
            try {
                obj_XHR = new XMLHttpRequest();
                if (obj_XHR.overrideMimeType)
                    obj_XHR.overrideMimeType('text/xml');
            }
            catch (Erro_1) {
                // tratamento do erro...
                obj_XHR = false;
            }
        }
        else
            if (window.ActiveXObject) {
                // IE
                try {
                    // 1° método de Microsoft
                    obj_XHR = new ActiveXObject('Msxml2.XMLHTTP');
                }
                catch(Erro_2) {
                    try {
                        // 2° método de Microsoft
                        obj_XHR = new ActiveXObject('Microsoft.XMLHTTP');
                    }
                    catch(Erro_3) {
                        // Atualizar o navegador...
                        obj_XHR = false;
                    }
                }
            }
    
        if(!obj_XHR) {
            alert('O seu navegador não suporta os objetos XMLHTTP...');
            return false;
        }
        else
            return obj_XHR;
    }
    
    
    
    function exibirClassificacao(param) {
                       
        var obj_XHR = criarRequest();
    
        if (param == 'PHP')
           var url = 'exibirSelectClassif.php';
    
       if (param == 'HTML')
           var url = 'exibirClassif.html';
    
        obj_XHR.open('GET', url, false);
    
        alert('TiTi');
    
        obj_XHR.onreadystatechange = function () {
            try {
    
                alert('ToTo');
    
                if(obj_XHR.readyState == 4) {       // transferência completa
    
                    if(obj_XHR.status == 200) {     // status 200 == OK;
                                                    // status 404 == não achou a página
    
                        document.getElementById('classif').innerHTML = obj_XHR.responseText;
                    }
                }
            }
            catch (erro) {
                alert("ERRO : " + erro.description);
            }
        };
    
        obj_XHR.send(null);
    }
    Sous FireFox, l'alerte TiTi s'affiche mais pas l'alerte TuTu...

    Quelqu'un a déjà rencontré ce problème ?

    Cyril.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    le onreadystatechange ne fonctionne qu'en asynchrone.
    Or tu lances l'appel en synchrone ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj_XHR.open('GET', url, true);
    A+

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Merci,

    Ce problème est résolu...
    Le pire c'est que j'avais déjà lu ça hier et dans les 2 cas, cela ne fonctionnait pas... Mais ce matin je me suis rappellé de mettre l'espace cache à 0 MB et effectivement cela fonctionne à présent...

    Quand je dis ce problème est résolu, cela sous-entend alors qu'il y en a un autre... Cependant celui-ci est d'ordre visuel parce que finalement ce qui doit être fait est... fait.

    Comme un petit dessin vaut mieux qu'un grand discours, voici le 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
    function carregarInfo() {
    
            if (document.criarAula.listaModulos.value != '-1') {
                  //var moduloSelected = document.criarAula.listaModulos.options[document.criarAula.listaModulos.options.selectedIndex].text;
                  var moduloSelected = document.criarAula.listaModulos.value;
                  var modulo = moduloSelected.split('|');
    
                  document.criarAula.ordemAula.value = modulo[3];
                  document.criarAula.ordem.value = modulo[3];
    
                  if (modulo[2] == '') {
                      exibirClassificacao('exibirSelectClassif.php');
                      //hidden
                      document.criarAula.classificacaoAula.value = document.criarAula.listaClassificacao.value;              }
                  else {
                      exibirClassificacao('exibirClassif.html');
                      document.criarAula.classificacaoAula.value = modulo[2]; //hidden
                      document.criarAula.classificacao.value = modulo[2];
                  }
            }
        }
    Les 2 champs en bleu sont seulement créés quand on appelle leur page respective. Le champ en rouge est un INPUT de type hidden.

    Sous IE, avec le premier champ document.criarAula.listaClassificacao, j'ai un message d'erreur qui dit que l'objet est nul ou qu'il n'existe pas... Ceci doit être dû au fait que, pour cause de compatibilité avec FireFox et comme me l'a indiqué E.Bzz, je suis passé du mode synchrone au mode asynchrone. Avant je n'avais pas d'erreur car avant de faire appel à ce champ, il fallait attendre la fin de la fonction :exibirClassificacao('exibirSelectClassif.php'); qui justement pour rôle de créer le dit champ alors qu'en asynchrone, il n'y a pas d'attente...

    Sous FireFox, c'est avec le second champ document.criarAula.classificacao que j'ai un petit problème (mais pas avec ma plantation ) car il ne garde pas la valeur qui lui est affectée. Elle apparait et elle disparait aussitôt...

    En fin de compte, comme j'utilise le champ document.criarAula.classificacaoAula lors du changement de page, fonctionnellement c'est tout bon, mais ça me chagrine d'avoir ces deux pépins...

    A quand la normati
    tisation pour tout le monde et non pas seulement pour les développeurs...

    Cyril.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Pour le 1°, il faudrait utiliser une syntaxe moins obsolète (sans garantie de résultat, mais très fortement conseillé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['criarAula'].elements['listaClassificacao']
    ... et dans tout ton script, d'ailleurs

    Pour la seconde, faudrait voir quels sont les traitements qui accèdent à cette value. Elle ne doit pas disparaitre toute seule ...

    A+

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Je n'ai aucun autre traitement sur ce champ.

    Le problème vient encore une fois à cause du mode asynchrone car la fonction "exibirClassificacao('exibirClassif.html');" qui crée le champ lui affecte la valeur "" (chaine vide).

    Quand à ma syntaxe obsolète... ça fait mal...

    Cyril.

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par cgone Voir le message
    Le problème vient encore une fois à cause du mode asynchrone car la fonction "exibirClassificacao('exibirClassif.html');" qui crée le champ lui affecte la valeur "" (chaine vide).
    Cela sous-entendrait que le champ affichait une valeur ... avant d'aoir été créé ?
    Quand à ma syntaxe obsolète... ça fait mal...
    Désolé : c'était pas le but
    C'est d'ailleurs une syntaxe/erreur encore très répandue (mais qui pose des problème de compatibilité) ...

    A+

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Cela sous-entendrait que le champ affichait une valeur ... avant d'avoir été créé ?
    Oui, je sais bien que ça parait bizarre et je suis sûr qu'il doit y avoir une explication logique mais le fait est que si, par exemple, au lieu d'une chaine vide, j'affecte "toto" à mon champ, la fonction m'affiche son résultat et ensuite elle affiche "toto"...

    Cyril.

Discussions similaires

  1. [AJAX] Firefox tronque ma réponse XML alors que IE non
    Par phxGolden dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/05/2007, 11h20
  2. [AJAX] AJAX+Firefox : readyState ne dépasse pas le 1
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 13h42
  3. Réponses: 1
    Dernier message: 05/12/2006, 16h54
  4. [AJAX] Firefox 2.0 ne reconnaît plus xmlHttpRequest ?
    Par senacle dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/11/2006, 18h09
  5. [Ajax] question avec onreadystatechange
    Par lhulard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/06/2006, 14h46

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