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] Avec Alert() ca marche mais pas sans


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut [AJAX] Avec Alert() ca marche mais pas sans
    Bonjour,

    oui je sais le titre n'est pas très clair mais je n'en ai pas trouvé d'autre !

    Je vous explique le problème qui me prend la tête depuis 2h.

    Je travail avec ajax !

    - J'ai un zone cachée et vide que je remplis (via ajax) lorsque je clic sur un sous titre.

    Juste que là tout va bien, j'ai l'habitude. Cependant, avant affichage, je dois exécuter du code javascript sur des element (by id). Il s'agit de boite dragable sur lesquels je dois exécuter du code pour les rendres justement dragable et cachées.

    Et c'est là que ça foire !

    Si je place un alert(1) avant, pendant la fonction qui rend les boites dragables, tout se passe très bien.

    Si je retire le alert(1), ça ne marche pas.


    J'ai pensé que le code venant de l'ajax avait besoin d'un certain temps pour être accessible par le javascript. J'ai donc remplacer mon alert par une fonction qui attend 1 sec, puis 2 puis 3 mais non ce n'est pas ça.

    Apparemment, il veut absolument un alert (ou retour à l'utilisateur)


    En regardant mon code d'un peu plus près je crois avoir trouver l'origine:

    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
     
    function feedId(id,url)
    {
    	var xhr_object = null;
    	if(window.XMLHttpRequest) // Firefox
    	   xhr_object = new XMLHttpRequest();
    	else if(window.ActiveXObject) // Internet Explorer
    	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    	else { // XMLHttpRequest non supporté par le navigateur
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    	   return;
    	}
    	xhr_object.open("GET", url, true);
    	xhr_object.onreadystatechange = function() {
    	   if(xhr_object.readyState == 4) {
       	  document.getElementById(id).innerHTML=xhr_object.responseText;
    	   }
    	}
    	xhr_object.send(null);
    }
    Ha mon avis le problème vient de là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    xhr_object.onreadystatechange = function() {
    	   if(xhr_object.readyState == 4) {
       	  document.getElementById(id).innerHTML=xhr_object.responseText;
    	   }
    	}
    Si je comprend bien, tant qu'il a pas de réponse, le code javascript poursuit son exécution. Et seulement lorsqu'il a une réponse, il exécute le code.

    Donc si j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      	feedId(id1,url); //fonction du dessus
      	//pausecomp(3000);
      	hideDragBox(id1); // execute du javascript sur des éléments donné par feedId
      	toggleview(id1); // affiche la zone
    Apparemment, hideDragBox est exécuté avant d'avoir la réponse de xhr_object.onreadystatechange se trouvant de feedId

    Avec un wait, cela ne fonctionne pas, car TOUT est bloqué et
    hideDragBox est tout de même executé avant

    Avec un alert, apparement, cela laisse le temps à xhr_object.onreadystatechange.

    Cela est confirmé par le fait que si je clic immédiatement (touche enter) sur le ok de l'alert, cela ne fonctionne pas mais si je laisse 1/2 sec, ca fonctionne.

    Donc j'ai besoin de vos conseils:

    1/ On arrive à se passer de xhr_object.onreadystatechange.
    2/ Lors du clic qui déclanche tout, j'exécute 2 fonctions javascript (pas encore testé)


    C'est difficile a expliquer mais ça me prend la tête et j'aimerais de l'aide


    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Je viens d'essayer la solution 2 !

    Dans mon onclick, j'appel les 2 fonctions:

    1/ le feedid
    2/ le reste

    mais cela ne fonctionne pas, j'ai essayer une autre solution

    1/ feedid
    2/ wait 1sec
    3/ le reste

    Cela ne fonctionne toujours pas ^^

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Ben voila, suffit d'expliquer le problème à quelqu'un avec d'autres mots pour trouver la solution tout seul

    Avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xhr_object.onreadystatechange = function() {
    	   if(xhr_object.readyState == 4) {
       	  document.getElementById(id).innerHTML=xhr_object.responseText;
    	   }
    	}

    Après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    xhr_object.onreadystatechange = function() {
    	   if(xhr_object.readyState == 4) {
       	  document.getElementById(id).innerHTML=xhr_object.responseText;
    	  hideDragBox(id);
    	  toggleview(id);
    	   }
    }
    J'aime pas car cela me fait une fonctionn feedid en plus mais ça fonctionne et c'est logique

    Merci, non sérieux, si je n'étais pas venu expliquer, j'aurais pas trouvé

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

Discussions similaires

  1. [PHP 5.0] Fonction mail marche avec hotmail et yahoo mais pas avec gmail
    Par unix27 dans le forum Langage
    Réponses: 3
    Dernier message: 08/11/2010, 12h21
  2. Réponses: 7
    Dernier message: 09/12/2008, 00h28
  3. [son] marche mais pas avec des écouteurs
    Par oligig dans le forum Matériel
    Réponses: 0
    Dernier message: 04/10/2007, 16h04
  4. [AJAX] @localhost ça marche mais pas @IP
    Par JauB dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/02/2007, 21h32
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

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