Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-12-2007 16:28:45

tschtong
Membre
Lieu: Bretagne
Date d'inscription: 06-11-2007
Messages: 55

Ajax et internet explorer

Je me permets de poster ce sujet qui n'a que partiellement à voir avec les sujets de ce forum. Sauf que le site que je développe est réalisé avec le sympathique ZF. J'utilise également prototype.

Voici le code de mon header  :

Code:

<script src="/public/scripts/prototype.js" type="text/javascript"></script>
{literal}
<script type="text/javascript">
  
    function getComments(id,chemin){        
            var url = 'http://www.tschtong.fr/'+chemin+'/comments';
            var myAjax = new Ajax.Updater
                            ('comment'+id, 
                            url, 
                            
                            {
                                evalScripts:true,
                                onLoading:function(request){$('spinner'+id).show()},                                 
                                onComplete:function(){$('spinner'+id).hide()},
                                parameters: 'id_pos='+id,
                                method:'get'
                            
                            });    
    }
        
    function closeComments(id){
        $('comment'+id).innerHTML="";
        $('spinner'+id).hide();
    }
    
    function postComment(id,chemin){        
            var url = 'http://www.tschtong.fr/'+chemin+'/postcomment';
            var parametres = 'id_pos='+id;
            var myAjax = new Ajax.Request
                            (
                            url, {                            
                                onLoading:function(request){$('spinner'+id).show()},                                  
                                parameters: parametres,
                                method:'get',
                                onSuccess : function(response){
                    var renderDiv = $('comment'+id);
                    renderDiv.innerHTML = response.responseText;
                    $('spinner'+id).hide();                              
                }                            
                            });    
        }
</script>
{/literal}

Le problème vient de ma notification de chargement pendant la requête (le spinner) . Sur le onLoading il s'affiche mais refuse quasi systématiquement de se refermer sous IE sur le onComplete. Quelque fois il se ferme bien. Sous Firefox je n'ai aucun problème. J'ai recherché sur le web diverses réponses, mais je n'ai pas trouvé de solutions. Le problème existe pour Ajax.Updater et pour Ajax.Request. Pourtant, Element.Hide fonctionne parfaitement pour d'autres styles de requêtes. Donc le onComplete pourrait poser problème. Que faire ? Si vous avez déjà rencontrer ce problème et si vous avez une solution, je suis preneur !

PS. : La réponse du serveur marche cependant de façon impeccable.
Merci à vous.
A+Tschtong.

Hors ligne

 

#2 24-12-2007 17:49:32

Phoenix17
Membre
Lieu: Nancy
Date d'inscription: 09-04-2007
Messages: 73
Site web

Re: Ajax et internet explorer

Pour le loading, tu peut utiliser onLoading() pour afficher le spinner, et onLoaded() pour le cacher, cependant ces méthodes ne sont pas garanties, selon la doc officielle. (http://prototypejs.org/api/ajax/options)

Personnelement, j'utilise onLoading() pour afficher le spinner, et, dans onSuccess(), je le cache, et cela a toujours fonctionner sous mFF et IE.

Tu testes sous IE 6 ?

Dernière modification par Phoenix17 (24-12-2007 17:50:18)

Hors ligne

 

#3 26-12-2007 22:29:51

tschtong
Membre
Lieu: Bretagne
Date d'inscription: 06-11-2007
Messages: 55

Re: Ajax et internet explorer

Salut, merci de ta réponse j'ai essayé avec les différents états : onLoaded, onComplete, onSuccess, rien à faire...
Sous IE, le spinner s'affiche et se cache bien au premier coup, mais au 2éme, 3éme, 4ème etc coup le spinner s'affiche bien sur le onLoading, mais reste afficher ensuite. Par contre j'ai testé avec les autre navigateurs (Opera & Safari) ca marche nickel. J'ai pas testé sous IE6 ):
A+ tschtong

Hors ligne

 

#4 26-12-2007 22:49:01

Phoenix17
Membre
Lieu: Nancy
Date d'inscription: 09-04-2007
Messages: 73
Site web

Re: Ajax et internet explorer

Donc c'est dans IE 7 que tu testes ?

Est'ce que au moins, ta requête ajax te retourne quelques chose dans le onSuccess ?
Car je trouverais cela bizarre que le spinner ne se cache pas si tu met ta ligne de code permettant de le cacher dans le onSuccess, et que ta requête fonctionne.

Si tu bosses sur IE 7, il existe des extensions te permettant de débugger ton javascript un peu comme FireBug sous Firefox (bien que ce dernier est le meilleur, je pense).
Cependant, à ma connaissance, la plupart des extensions IE sont payantes, il me semble qu'il en existe en free, mais je ne saurais te dire le nom.

J'ai vu que tu utilises les methodes Element.Show() et Element.Hide() de prototype.
A titre de test, tu peut toujours essayer de les remplacer par $(element).style.display = '' et $(element).style.display = 'none'.

Je viens de voir que dans ton code, il y a une balise de chargement 'spinner{id}' par requête.
Dans ce cas, j'imagine que tu fais le nécessaire au préalable pour créer les
<div id="spinner{id}">Chargement...</div>.

Si tes elements 'spinner{id}' font partie intégrante du résultat de ta reqûete (cad qu'il font partie de ta réponse ajax), le problème peut venir de là, car pendant le onLoading(), le réponse n'est pas encore arrivée et donc l'action ne peut être effectuée.

Je ne sais pas comment tu fait intéragir l'ensemble, mais en regardant ton exemple, j'imagine que tu fait une reqûete sql / ajax par commentaire.. ?
Si, oui, tu pourrais largement optimiser tout ça en faisant une seule requête sql qui récupère tous les commentaires, tu transmet ensuite en les données en json pour les récupèrer dans ton onSuccess.
Ainsi, tu pourrais faire un boucle en javascript, qui créer chaque commentaire en html (avec dom par exemple).
Et donc, tu ne ferais qu'une seule requete SQL, et une seule AJAX.


Bon courage

Dernière modification par Phoenix17 (26-12-2007 23:01:16)

Hors ligne

 

#5 27-12-2007 10:02:45

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Ajax et internet explorer

Cependant, à ma connaissance, la plupart des extensions IE sont payantes, il me semble qu'il en existe en free, mais je ne saurais te dire le nom.

Y'a la "Internet Explorer Dev Toolbar" officiel déjà smile. Après j'suis pas allé voir plus loin.

Hors ligne

 

#6 07-01-2008 11:16:59

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Ajax et internet explorer

Bonjour tschtong,

Tu peux mettre des traces (alert ou autre) entre les lignes

Code:

alert ("toto1");
                    var renderDiv = $('comment'+id);
alert ("toto2");
                    renderDiv.innerHTML = response.responseText;
alert ("toto3");
                    $('spinner'+id).hide();
alert ("toto4");

Tu verras où s'arrête ton code, la spécialité de IE est de s'arrêter sans rien dire (pas d'erreur, aucune trace,...)

Je parie sur un problème autour du innerHTML qui dans certain cas a des comportements bizarres... si tu utilises prototype, il faudra peut-être regarder du coté de Insertion.Top & co...

Sinon comme outil de débug, tu as : companionJS (gratuit) et la debugBar (payant mais pas cher et en éval pendant 30 jours gratos) qui sont assez géniaux.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages