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] Fonction ajax ne fonctionne qu'une seule fois que IE (titre édité)


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut [AJAX] Fonction ajax ne fonctionne qu'une seule fois que IE (titre édité)
    Salut,
    Voilà bien le genre de truc indébugable, mais je demande quand même, au cas où...
    Donc le code ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function getHTTPObject() {
      var xmlhttp;
     
      if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
          xmlhttp = new XMLHttpRequest();
          } catch (e) {
          xmlhttp = false;
          }
        }
      return xmlhttp;
      }
    var http = getHTTPObject();
    la fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function play_track(ip,port,numero) {
      var url = "http://*********/play.php?track="; 
      var url2 = url + numero + "&ip=" + ip + "&port=" + port;
      http.open("GET", url2, true);
      http.send(null);
    }
    Sous firefox, pas de problème, mes boutons "play_track" sont fonctionnels.
    En revanche, sous IE (7), ca fonctionne pendant un moment (de durée aléatoire), c'est à dire que les boutons fonctionnent pendant, disons, 2 minutes, et puis rideau.
    Un F5 sur la page n'aide pas. Je suis obligé de quitter IE et de le relancer.

    Si quelqu'un a une idée... merci !

  2. #2
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    Essaye de créer un objet XMLHttpRequest à chaque fois, au lieu de le faire une fois au début.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par nicocsgamer
    Essaye de créer un objet XMLHttpRequest à chaque fois, au lieu de le faire une fois au début.
    Je comprends pas ce que tu veux dire par "a chaque fois".
    Mettre le script dans le body au lieu du head ?


    PS: j'ai essayé d'inclure la fonction getHTTPObject dans la fonction play_track, mais c'est pas mieux.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    J'ai pu étudier un peu mieux le problème, mais je n'ai toujours pas de solution.
    En fait, dans ma page, j'ai 5 boutons, appelant la fonction play_track.

    Sous IE, chaque bouton ne fonctionne qu'une seule fois, et même si je rafraichis la page ! (sous firefox, ils fonctionnent ad vitam).
    Dès qu'un des boutons est cliqué, il est comme "désactivé".

    L'appel de la fonction se fait de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <div class="button" onClick="play_track('<?=$ip?>',<?=$port?>,1)">BOUTON 1</div>
    <div class="button" onClick="play_track('<?=$ip?>',<?=$port?>,2)">BOUTON 2</div>
    <div class="button" onClick="play_track('<?=$ip?>',<?=$port?>,3)">BOUTON 3</div>
    ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    Je continue mes recherches...
    J'ai rajouté une alerte dans la fonction play_track
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function play_track(ip,port,numero) {
      alert ("bouton cliqué");
      var url = "http:///**********/play.php?track="; 
      var url2 = url + numero + "&ip=" + ip + "&port=" + port;
      http.open("GET", url2, true);
      http.send(null);
    }
    Et j'ai bien l'alerte à chaque fois que je clique sur un bouton, donc la fonction est bien appelée.
    Mais le reste de la fonction (http.open et/ou http.send) devient inopérant après le premier clic.

    Ca commence à me

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    J'ai trouvé la réponse ici:
    http://www.developpez.net/forums/sho....php?p=2295519

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http.open("POST", url2, true);
    Fallait l'savoir

    Argh, non, maintenant ça ne fonctionne plus du tout sous firefox

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    Enfin la fin...

    La méthode post ne fonctionnant pas avec Firefox, j'ai essayé l'autre méthode décrite dans le sujet en lien au dessus, à savoir l'insertion d'une valeur aléatoire dans le lien php appelé dans la fonction play_track, afin d'obliger IE à rappeler la page php.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function play_track(ip,port,numero) {
      var r = Math.random() ;
      var url = "http://**********play.php?track=" + numero + "&ip=" + ip + "&port=" + port + "&rand=" + r ;
      http.open("GET", url, true);
      http.send(null);
    }
    Qu'est-ce que c'est moche comme méthode... mais ça marche

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

Discussions similaires

  1. [AJAX] Appel AJAX .load() jquery ne fonctionne qu'une seule fois
    Par ThomasF dans le forum jQuery
    Réponses: 4
    Dernier message: 11/01/2015, 12h08
  2. pourquoi on error goto ne fonctionne qu'une seule fois ?
    Par alsimbad dans le forum Général VBA
    Réponses: 9
    Dernier message: 05/09/2014, 12h09
  3. Réponses: 5
    Dernier message: 12/10/2010, 20h49
  4. [AJAX] [XMLHttp][IE]Fonction qui ne fonctionne qu'une seule fois
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2007, 11h16
  5. fonction qui s'exécute qu'une seule fois sous Firefox
    Par la.sophe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/03/2006, 10h02

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