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] readyState reste bloqué à 1


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut [AJAX] readyState reste bloqué à 1
    Bonjour tout le monde,

    J'ai un problème que j'arrive pas à cerner, en fait j'envoie mes paramètres par un POST et j'attends la réponse que je reçois jamais.

    Pire, mon readyState reste bloqué à un!

    Je suis pas un grand expert en javaScript alors je sais d'où ça vient mon problème.

    Si vous pouvez déjà me dire ça veut exactement quoi le readyState==1 ça serait pas mal. Moi je comprend par ça que ma demande est envoyée et que je dois attendre la retour du serveur.

    Quand je vérifie les logs d'accès je vois que j'ai bien les fameux 200 et 4 qui me font rêver.

    Qu'en pensez-vous?

    Merci
    Simon

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    readyState==1 correspond au début de transfert des données.
    Pour le reste... comment sais-tu que tu restes bloqué à 1 et que tes logs sont correctes ?
    A quoi ressemble ton code ? As-tu Firebug installé et si oui, que te dit-il ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Je sais que tout va bien au niveau des logs car je consulte les logs d'apache et je lis ce qui est écris, alors je trouve l'url et à la fin j'ai 200 4.

    Je sais que je suis bloqué sur le 1 car j'affiche mon:

    this.transport.readyState dans un DIV. A chaque readyStateChange.

    Donc j'ai une ligne de ce genre et j'ai peur que cela bloque à ce niveau là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.transport.onreadystatechange=this.reponse;
    Et j'ai dans mon objet une methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    reponse:function() { if(this.transport.readystate==4) { 
     
    if(this.transport.status==200) this.options.oncomplete(); }
     
    else $('division').innerHTML=this.transport.readystate;
     
    }
    Au niveau de Firebug me dit rien... Il m'affiche l'url appelée, les headers, le post ...


    Si j'ai un probleme au niveau de ma fonction de traitement de la réponse, vous pensez que cela peut causer mon problème?

    Merci Merci

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A tout hasard, readystate, c'est une faute de frappe ? Car c'est readyState et javascript est sensible à la casse.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    C'est une erreur de frappe!

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ce serait bien que tu mettes plus de code (avec la balise 'code' si possible, bouton '#' de l'éditeur) javascript et html généré...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Je sais pas si cela peut vous inspirer mais en mode synchrone tout marche à merveille.

    Voici à quoi ressemble mon 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
     
     
    Ajax.Requete=Class.create();
     
    Ajax.Requete.prototype={
     
      demarrage: function(url, options) {
        this.transport = Ajax.getTransport();
        this.setOptions(options);
        this.lancer(url);
        },
     
     
      setOptions: function(options) {
     
                 this.options = {
     
                                 method:       'post',
                                 asynchronous: true,
                                 contentType:  'application/x-www-form-urlencoded',
                                 encoding:     'UTF-8',
                                 parameters:   '',
     
                                }
     
                 Object.extend(this.options, options || {});
     
                 this.options.method = this.options.method.toLowerCase();
     
                 },
     
     
      lancer:function(url) {
        this.url = url;
        this.method = this.options.method;
        this.params = this.options.parameters;
     
        this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);
     
        this.setHeaders();
     
        this.transport.send(this.params);
     
        this.transport.onreadyStatechange=this.reponse();
     
             },
     
     
      setHeaders:function() {
     
           this.transport.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
           this.transport.setRequestHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
           if (this.method == 'post') { 
           this.transport.setRequestHeader('Content-type', this.options.contentType +'; charset='+ this.options.encoding ); 
           if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) this.transport.setRequestHeader('Connection', 'close');        
               }
     
             },
     
     
      reponse:function() {
     
          if(this.transport.readyState==4) { if (this.transport.status==200) this.options.onComplete.apply(this); }
     
    //C'est ici que ça ne change pas du tout, j'ai tjrs 1
     
        else  $('nbrFlash').innerHTML=this.transport.readyState;
     
            }
     
    }
    Et voila pour lancer ma requête je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    new Ajax.Requete('infoLive.php',{
     
                                             method:'post', 
                                             asynchronous:true, 
                                             contentType:'application/x-www-form-urlencoded', 
                                             encoding:     'UTF-8', 
                                             parameters: 'pseudo=sarahprincess',
                                             onComplete: function() { alert(this.transport.responseText);}
     
                                             });

    Donc Firebug me dit rien du tout.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.transport = Ajax.getTransport();
    getTransport(), c'est quoi ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    C'est une methode de l'objet Ajax pour récupérer l'objet XHR suivant le navigateur.

    Mais ça marche car en mode asynchrone ça marche.

    Simon

  10. #10
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    j'ai pensé que cette ligne peut être la source du problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);
    à vérifier aussi à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.options.onComplete.apply(this);

    Si j'ai un probleme au niveau de ma fonction de traitement de la réponse, vous pensez que cela peut causer mon problème?
    Tout peut causer des problèmes

    ++
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Tout ce que tu viens de me dire marche en mode synchrone sous FF alors je soupçonne pas ces points du tout moi, quoique je puisse me tromper.

    A mon avis il faut regarder du coté de this.transport.onreadystatechange c'est le seul nouveau point en asynchrone à mon avis alors...

    Mais pourquoi cela passe pas à 2, car pour arriver au 1 il faut envoyer la requete, ce qui est chose faites, bon maintenant peut être qu'il faut envoyer des headers de la part du serveur aussi pour que la communication se passe bien...

    A creuser!!

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Et qu'est-ce que cela donne en supprimant la fonction setHeaders() ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Cela donne toujours la même chose.
    Je pense qu'en mode asynchrone ma requete n'est même pas envoyée!

    Et en mode synchrone j'arrive à récupérer la réponse sous FF mais pas sous IE (j'ai un commentaire genre l'objet Ajax indéfinit en pointent vers la ligne de mon programe qui contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Ajax.Requete('infosLive.php',....);
    J'éspère qu'on va résoudre ce problème.
    Biz
    Simon

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu utilises Prototype, la création de classe se fait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ajax.Requete=Class.create({hash des methodes});
    Il m'est déjà arrivé avec Prototype d'avoir des soucis pour utiliser certaines fonctions natives js... c'est peut-être une piste !
    J'éspère qu'on va résoudre ce problème.
    Oui, il n'y a pas de raison

    EDIT :
    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
    Ajax.Requete=Class.create({
     
      demarrage: function(url, options) {
        this.transport = Ajax.getTransport();
        this.setOptions(options);
        this.lancer(url);
        },
     
     
      setOptions: function(options) {
     
                 this.options = {
     
                                 method:       'post',
                                 asynchronous: true,
                                 contentType:  'application/x-www-form-urlencoded',
                                 encoding:     'UTF-8',
                                 parameters:   '',
     
                                }
     
                 Object.extend(this.options, options || {});
     
                 this.options.method = this.options.method.toLowerCase();
     
                 },
     
     
      lancer:function(url) {
        this.url = url;
        this.method = this.options.method;
        this.params = this.options.parameters;
     
        this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);
     
        this.setHeaders();
     
        this.transport.send(this.params);
     
        this.transport.onreadyStatechange=this.reponse();
     
             },
     
     
      setHeaders:function() {
     
           this.transport.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
           this.transport.setRequestHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
           if (this.method == 'post') { 
           this.transport.setRequestHeader('Content-type', this.options.contentType +'; charset='+ this.options.encoding ); 
           if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) this.transport.setRequestHeader('Connection', 'close');        
               }
     
             },
     
     
      reponse:function() {
     
          if(this.transport.readyState==4) { if (this.transport.status==200) this.options.onComplete.apply(this); }
     
    //C'est ici que ça ne change pas du tout, j'ai tjrs 1
     
        else  $('nbrFlash').innerHTML=this.transport.readyState;
     
            }
     
    });
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Si c'était Class.create() le problème pourquoi ça marche pour le mode synchrone?

    C'est vrai que ça bloque avec ie!!

    Je vais encore essayer tout ça!!

    A tout à l'heure.

    Simon

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Je commence à soupçonner fortement le Class.create()

    En fait j'utilise pas prototype mais je m'en suis inspiré, et l'objet Class c'est exactement le même que dans prototype 1.5.1 si tu peux jeter un coup d'oeil.

    Sur MSIE, l'objet Ajax n'est pas reconnu du tout, mais sous FireFox ça marche en mode synchrone. J'arrive même à récupérer le résultat voulu.

    Simon

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Le truc que tu m'as dit n'a rien changé du tout.
    Donc à creuser.

    Simon

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut readyState bloqué sur 1
    Voici pour voir l'objet Class:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var Class = {
     
           create:function() {
     
                  return function()  {
     
                          this.initialize.apply(this,arguments);
     
                       }
     
                     }
     
                 }
    Alors d'après mes constatations les objets ou classes créés par Class déjà IE7 ne les reconnait pas du tout.

    Je continue de creuser.

    Simon

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Merci beaucoup
    Je m'y suis mis cette aprem et c'est résolu.
    Biz
    Simon

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

Discussions similaires

  1. [AJAX] Ajax : readyState bloqué à 1
    Par nynnie7 dans le forum AJAX
    Réponses: 3
    Dernier message: 06/02/2011, 13h46
  2. [AJAX] readyState bloque à 3
    Par cocoyot dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/10/2008, 09h58
  3. [AJAX] readyState bloque à 1
    Par dubitoph dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/09/2008, 09h39
  4. [AJAX] fonction de reponse avec argument, readystate reste à 1
    Par CrocodileMan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2007, 08h30
  5. [AJAX] readyState passe de 1 à 4 : Probleme Connu ?
    Par raoulchatigre dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 29/08/2006, 12h39

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