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] readystatechange et Explorer


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de Shin_RockmanX
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 78
    Points : 68
    Points
    68
    Par défaut [AJAX] readystatechange et Explorer
    Bonjour à tous.
    Bon alors je dois dire que mon problème est très très bizarre et je m'en remet à vos connaissances d'expert pour m'aider.

    Le principe: j'ai une page sur laquelle les administrateurs du site peuvent gérer les items, les catégories, les utilisateurs et les magasin.

    Pour chaque type, il y a un select qui a en événement onchange une fonction ajax qui permet de remplir le formulaire adjacent avec les données de l'élément sélectionné.

    voici le code ajax qui est activé lors de l'événement onchange:

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    function makeRequest(idsearch, typesearch) {
        if (!http_request) {
          alert('Erreur AJAX. Mettre à jour votre navigateur.');
          return false;
       }
     
       if (http_request.readyState==4 || http_request.readyState==0) {
     
    		 if (typesearch=='shop') {
    		   http_request.onreadystatechange = fillShop;
    		   http_request.open('GET', "searchshop.ags?id="+idsearch, true);
    		 }
    		 else if (typesearch=='user') {
    		   http_request.onreadystatechange = fillUser;
    		   http_request.open('GET', "searchuser.ags?id="+idsearch, true);
    		 }
    		 else if (typesearch=='category') {
    		   http_request.onreadystatechange = fillCategory;
    //		   http_request.onreadystatechange = function() {alert(http_request.readyState);}
    		   http_request.open('GET', "searchcategory.ags?id="+idsearch, true);
    		 }
    		 else if (typesearch=='item') {
    		   http_request.onreadystatechange = fillItem;
    		   http_request.open('GET', "searchitem.ags?id="+idsearch, true);
    		 }
     
     
    	   http_request.send(null);
    	}
    }
     
    function fillShop() {
     
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
    	  document.getElementById("nameShop").value=http_request.responseText;
        } else {
          alert('There was a problem with the request.');
         }
      }
     
    }
     
    function fillCategory() {
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
    	  document.getElementById("nameCategory").value=http_request.responseText;
        } else {
          alert('There was a problem with the request.');
         }
      }
      else {
    //		alert(http_request.readyState);
    	}
    }
     
    function fillUser() {
     
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        	var parser=new DOMImplementation();
    	  	var xmlDoc=parser.loadXML(http_request.responseText);
    		 	var shopNode = xmlDoc.getElementsByTagName('user').item(0).getChildNodes();
      		document.getElementById("nameUser").value=shopNode.item(0).getChildNodes();
      		document.getElementById("passUser").value=shopNode.item(1).getChildNodes();
      		document.getElementById("shopUser").value=shopNode.item(2).getChildNodes();
      		document.getElementById("adminUser").checked=(shopNode.item(3).getChildNodes()==1);
        }
    		else {
          alert('There was a problem with the request.');
         }
      }
     
    }
     
    function fillItem() {
     
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        	var parser=new DOMImplementation();
    	  	var xmlDoc=parser.loadXML(http_request.responseText);
    		 	var itemNode = xmlDoc.getElementsByTagName('item').item(0).getChildNodes();
      		document.getElementById("barcodeItem").value=itemNode.item(0).getChildNodes();
      		document.getElementById("nameItem").value=itemNode.item(1).getChildNodes();
      		document.getElementById("categoryItem").value=itemNode.item(2).getChildNodes();
      		document.getElementById("priceItem").value=itemNode.item(3).getChildNodes();
        }
    		else {
          alert('There was a problem with the request.');
         }
      }
     
    }
    Sous firefox, tout ce passe comme prévu ça marche parfaitement.
    Sous explorer, ça ne marche que la première fois. après ça ne marche plus.

    Alors j'ai fait des test en affichant des alert('ok'); sous différentes parties du code.

    J'ai fait les constations suivante:
    • A chaque changement de la liste, la méthode makerequest effectue bel et bien les opération demandée
    • après le 1er appel, la fonction définie en "onreadystatechange" n'est plus rappelé


    c'est très bizarre.

    Quelqu'un a une idée???

    Merci d'avance

  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 Shin_RockmanX Voir le message
    c'est très bizarre.

    Quelqu'un a une idée???
    C'est normal, c'est une "feature" d'Internet Explorer.

    Il faut absolument faire appel à la méthode abort sur ton objeet xhr si tu veux le ré-utiliser dans IE.

    Normalement, tout se passera correctement après ça.

    Référence : http://radio.javaranch.com/pascarell...735438047.html

  3. #3
    Membre du Club Avatar de Shin_RockmanX
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    merci beaucoup j'avais jamais lu ça avant c'est super ça marche niquel.
    désolé pour la question apparemment triviale

  4. #4
    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 Shin_RockmanX Voir le message
    désolé pour la question apparemment triviale
    Tu n'as aucune raison de t'excuser. La question est pas triviale, et elle mériterait largement de figurer dans la FAQ (mais que fait le responsable )

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

Discussions similaires

  1. Struts2 Ajax et Internet Explorer 6 :'(
    Par serj' dans le forum Struts 2
    Réponses: 8
    Dernier message: 26/07/2009, 00h13
  2. [AJAX] ajax et internet explorer 7
    Par michael rossi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/07/2008, 15h39
  3. (Ajax crossBrowser) Internet Explorer..
    Par heliophane dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/04/2008, 11h35
  4. [AJAX] ajax et internet explorer :s
    Par zakuza dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/04/2007, 19h35
  5. [AJAX] Ajax sous internet explorer 7
    Par leoche dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/04/2007, 12h41

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