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:
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
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); }
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.
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; } }
Donc si j'ai ceci:
Apparemment, hideDragBox est exécuté avant d'avoir la réponse de xhr_object.onreadystatechange se trouvant de feedId
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
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
Partager