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] send n'est pas appelée tout le temps


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut [AJAX] [Firefox] send n'est pas appelée tout le temps
    Bonjour,

    Je suis débutante en Ajax.

    J'ai créé une classe Pack avec sa méthode CalculPrix. Elle doit envoyer une requête vers un script php qui me renvoie le prix.
    Une fonction PrixPack permet d'appeler cette méthode pour tous les packs initialement créés.

    Sous IE, tout ce passe normallement : il m'alerte les bons prix.

    Sous Firefox, il ne veut envoyer la requête que pour le dernier objet Pack, et donc ne m'alerte que le dernier prix.
    Quand je fais une alert après send (pour connaire readyState), là, firefox alerte tous les prix demandés...





    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
     
    /**
    BUT : calcule le prix d'un pack et le stocke dans sa propriété prixSpp et prixPublic
    */
    Pack.prototype.CalculPrix = function (station,nbjours,chaussures)
    {
    	objXMLHR = createXMLHttpRequest();
     
    	  objXMLHR.open('get','scripts/prix/prix.php?station='+station+'&nbjours='+nbjours+'&pack='+this.code+'&chaussures='+chaussures, true);
     
    	var pack = this;
     
    	objXMLHR.onreadystatechange = function()
    	{
     
    		if(objXMLHR.readyState ==4)
    		{
    			alert(objXMLHR.responseText);
    		}
    	}
     
    	objXMLHR.send(null);
    	//alert(objXMLHR.readyState);
     
     
    }
     
     
    /**
    BUT : calcule les prix de tous les packs
    */
    function PrixPacks(station,nbjours,chaussures)
    {
    	PackExpert.CalculPrix(station,nbjours,chaussures);
    	PackPremium.CalculPrix(station,nbjours,chaussures);
    	PackClassic.CalculPrix(station,nbjours,chaussures);
    	PackSA.CalculPrix(station,nbjours,chaussures);
    	PackJunior.CalculPrix(station,nbjours,chaussures);
    	PackSJunior.CalculPrix(station,nbjours,chaussures);
    	PackKid.CalculPrix(station,nbjours,chaussures);
    }
    Merci d'avance

    Bonne journée

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Essaye en synchrone.
    Je ne sais pas comment tu crée ton objet XMLHttpRequest (méthode createXMLHttpRequest), mais si ça trouve, firefox ne veut pas faire deux requêtes en même temps (avec des objets différents).
    En tout cas, la spec de lXMLHttpRequest stipule qu'un open dessus annule les autres requêtes (lorsqu'on utilise le même objets pour toutes les requêtes).

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut comment demander d'attendre ?
    Merci de ta réponse.

    J'ai réussis à faire ça en mode synchrone, effectivement, ça marche bien.

    L'inconvénient, c'est qu'en attendant la réponse, le navigateur est bloqué (normal) mais du coup, pour l'utilisateur, c'est pas très fluide.
    Quelqu'un connait un autre moyen ?

    Je mets quand même mon code en mode synchrone pour ceux qui aurait le même problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pack.prototype.CalculPrix = function (station,nbjours,chaussures)
    {
    	objXMLHR = createXMLHttpRequest();
     
    	objXMLHR.open('get','scripts/prix/prix.php?station='+station+'&nbjours='+nbjours+'&pack='+this.code+'&chaussures='+chaussures, false);
     
    	objXMLHR.send(null);
     
           pack.prix = objXMLHR.responseText;
     
    }


    merci quand même

    Bonne journée

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2014, 16h47
  2. [débutant] la methode Validate() n'est pas appellée
    Par maxattack dans le forum Struts 1
    Réponses: 26
    Dernier message: 16/05/2007, 17h06
  3. [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
  4. ADO n'est pas du tout portable Comment le rendre portable
    Par bruce-willis dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/03/2007, 10h52
  5. [servlet][filtre] filtre qui n'est pas appelé
    Par felix79 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/06/2005, 20h09

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