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] : pb en communication Synchrone sous Firefox !


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut [AJAX] : pb en communication Synchrone sous Firefox !
    Bonjour,

    je veux afficher les cordonnées du régisseur lors je sélectionne une régie dans une liste déroulante.
    Nous utilisons le serveur Tomcat 5.5 et les technologies suivantes : Struts / Spring / Hibernate 3.0 et Oracle...

    Dans ma page JSP, j'ai le code javascript suivant : «
    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
    // 1. Propriétés de la classe
    ajaxObject    	   = null;
    ajaxAsynchrone  = false;
    ajaxMethode      = "GET";
     
     
    // Création de l'objet XMLHTTpRequest
    if (window.ActiveXObject) {
          //Pour Internet Explorer
          ajaxObject = new ActiveXObject("Microsoft.XMLHTTP") ;
    } else if (window.XMLHttpRequest) {
          //Pour FireFox
          ajaxObject =  new XMLHttpRequest();
    } else {
          // Object XMLHttpRequest non supporté pour ce navigateur
          ajaxObject = null;
    }
     
    // 2. Méthodes de la classe
    function setAjaxAsynchrone() {
         ajaxAsynchrone = true;
    }
     
    function setAjaxSynchrone() 
    {
         ajaxAsynchrone = false;
    }
     
    function setAjaxMethode(m) {
         if (m=="GET" || m=="POST" || m=="HEAD")
         {
            ajaxMethode = m;
         }
    }
    ».

    Ensuite, j'ai la méthode findDebiteurByAjax(page, parametre) qui est appelé lors de la sélection d'une régie dans ma liste déroulante : «

    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
    setAjaxAsynchrone();
    setAjaxMethode('POST'); // on passe les informations par la méthode POST
    		
    						
    // Les deux paramètres sont :
    //   * page : nom de la page appelée
    //   * parametre : paramètre à envoyer à l'action Struts !
    function findDebiteurByAjax(page, parametre) {  
    	if (ajaxObject != null) {
      		var url = page; 
    	    	
        		// Si la méthode est get et que paramètre contient des données, on ajoute ? l'url
      		if (ajaxMethode == "GET" && parametre != null) { 
    	    		if (parametre != "") { 
    	   	  		url           = url + "?" + parametre; 
       			  	parametre     = null; 
    	     		}
    		}
    				
    	    
    	    	// Ouverture de la page dans le mode demandé
    	    	ajaxObject.open(ajaxMethode, url, ajaxAsynchrone);
    	
    	
    	    	//Alimente le content une fois la page compl?tement recu
    	    	ajaxObject.onreadystatechange = function() {
    										
    		          // Les données sont complètement accessibles ==> 4 (complet)
    		          // Le code HTTP retourné par la requête est Ok ==> 200
    		          if (ajaxObject.readyState == 4) {
    			          if (ajaxObject.status == 200) {
    													
    				          var res = ajaxObject.responseText;			
    				          alert(res);
    	    		          } 
    			
    			          // Force l'arret de tous les scripts javascript
    	    		          // window.event.cancelBubble = true;
          		          } 
        	        }
    	        
    		// Si envoi par POST, ...
    		if (ajaxMethode == "POST") {
    		     ajaxObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		}
    		    
    		 // Envoi de l'objet au serveur 
    		 ajaxObject.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    		 ajaxObject.send(parametre);
           }    
    }
    »


    Je peux maintenant vous présenter mon action Struts : «

    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
    public ActionForward coordDebiteurAssocieToRegie(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) throws Exception {
     
    		VueCreanceFB fb = (VueCreanceFB)form;
    		VueCreanceGC gc = fb.getVueCreanceGC();
     
    		String codeRegie = request.getParameter("codeRegie");
    		StringBuffer monXML = new StringBuffer();
     
    		if ((gc != null) && (codeRegie != null) && (!codeRegie.equals(""))) {
    			//TODO : Lorsque l'on saura récupérer le débiteur/régisseur associée à une régie
    			// on pourra ici compléter l'objet
    			// A voir avec Florence ou Olivier.
    			CreanceAssembler ass = (CreanceAssembler)gc.getAssembler();
    			IServiceRegie serviceRegie = (IServiceRegie)ass.getServiceRegie();
    			AdresseRegisseur adrRegisseur = serviceRegie.getAdresseRegisseur(codeRegie);
     
     
    			monXML.append("<?xml version=\"1.0\" ?>");
    			monXML.append("<root>");
     
    			if (adrRegisseur == null) {
    				monXML.append("<nomRegisseur></nomRegisseur>");
    				monXML.append("<adresseRegisseur1></adresseRegisseur1>"); 			monXML.append("<adresseRegisseur2></adresseRegisseur2>");
    monXML.append("<adresseRegisseur3></adresseRegisseur3>");
    monXML.append("<adresseRegisseur4></adresseRegisseur4>");
    monXML.append("<CPRegisseur></CPRegisseur>");
    monXML.append("<VilleRegisseur></VilleRegisseur>");
    monXML.append("<identifiantPays>100</identifiantPays>");
    			} else {
    				monXML.append("<nomRegisseur>" + ((adrRegisseur.getNomOuRaisonSociale() == null)?"":adrRegisseur.getNomOuRaisonSociale()) + "</nomRegisseur>");
    				monXML.append("<adresseRegisseur1>" + ((adrRegisseur.getAdresseRegisseur1() == null)?"":adrRegisseur.getAdresseRegisseur1()) + "</adresseRegisseur1>");
        			monXML.append("<adresseRegisseur2>" + ((adrRegisseur.getAdresseRegisseur2() == null)?"":adrRegisseur.getAdresseRegisseur2())+ "</adresseRegisseur2>");
        			monXML.append("<adresseRegisseur3>" + ((adrRegisseur.getAdresseRegisseur3() == null)?"":adrRegisseur.getAdresseRegisseur3()) + "</adresseRegisseur3>");
        			monXML.append("<adresseRegisseur4>" + ((adrRegisseur.getAdresseRegisseur4() == null)?"":adrRegisseur.getAdresseRegisseur4())+ "</adresseRegisseur4>");
        			monXML.append("<CPRegisseur>" + ((adrRegisseur.getCodePostalRegisseur() == null)?"":adrRegisseur.getCodePostalRegisseur()) + "</CPRegisseur>");
        			monXML.append("<VilleRegisseur>" + ((adrRegisseur.getVilleRegisseur()==null)?"":adrRegisseur.getVilleRegisseur()) + "</VilleRegisseur>");
        			monXML.append("<identifiantPays>" + (((String)adrRegisseur.getPaysRegisseur()==null)?"":(String)adrRegisseur.getPaysRegisseur()) + "</identifiantPays>");
    			}
     
    			// on termine le document XML
    			monXML.append("</root>");
    		}
     
    		System.out.println("=============");
    		System.out.println(monXML.toString());
    		System.out.println("=============");
     
    		//response.setContentType("application/xml");
    		response.setContentType("text/html");
    		response.setHeader("Cache-Control", "no-cache");
     
    		PrintWriter out = response.getWriter();
    		out.println(monXML.toString());
    		out.flush();
     
    		return null;
    	}
    ».

    Pour le moment, j'essaye de récupérer les informations sous forme de texte en JavaScript. Sous IE, tout fonctionne parfaitement alors que sous Firefox 1.5.0.5, cela marche bien en mode Asynchrone et il ne se passe rien en mode Synchrone.

    J'ai beau mettre des alerts dans la déclaration de la fonction associée à la propriété onreadystatechange, il ne se passe rien !!!
    Au niveau de la console JavaScript, aucune erreur n'est relevée !

    Avez-vous une idée,
    Merci d'avance.
    Fabien.

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Mouarf ! Ca apprendra à FireFox à mieux copier les objets ActiveX, et à toi à mieux respecter les conventions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xhr.open("GET",url,false)
    xhr.send(null)
    alert(xhr.responseText)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. AJAX KO sur chrome, OK sous FireFox
    Par phenix4 dans le forum jQuery
    Réponses: 3
    Dernier message: 04/07/2011, 21h25
  2. Ajax TabContainer le cadre BUG sous FireFox ?
    Par gregcat dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/10/2007, 15h17
  3. [AJAX] Sous Firefox une de mes pages renvoi : failure code : 0x80004005
    Par ffwrude dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/04/2007, 10h43
  4. [AJAX] Pb de listes liées en mode Synchrone sous FireFox
    Par olive_le_malin dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/12/2006, 17h28
  5. Réponses: 2
    Dernier message: 23/04/2006, 21h02

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