Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mootools: modifier la réponse

37 réponses
Avatar
Tr
Bonsoir,

j'utilise mootools pour exécuter une requête xmlhttp asynchrone.
dans le onsucces, je récupère le résultat de cette requête.
je souhaite modifier ce résultat:

la requête appelle un script php qui fait des choses puis calcule le
temps qu'il a mis pour le faire, tout ça construit un bout de page qui
est ensuite envoyé comme réponse, du classique.

pour le moment, lorsque j'affiche le résultat dans la page finale, le
temps d'exécution s'affiche en bas de page, c'est la dernière opération
faite par le script php.

je veux que ce résultat s'affiche en haut de la page (donc en premier
dans la réponse)

je pensais récupérer dans la réponse de la requête, avant de l'afficher
dans la page finale, le contenu du div qui affiche le temps d'exécution
en bas, et le copier dans un div en haut de la page.

malheureusement, et c'est pas faute d'avoir cherché, je ne trouve pas
comment accéder aux éléments de la réponse de la requête.

pourtant, je suis sûr qu'il existe une méthode simple et élégante pour
faire ça...
peut-être que je m'y prends très mal...
j'espère que quelqu'un pourra m'aiguiller :-)

par avance merci!

--
On est ce qu'on fait, pas ce qu'on dit ni pense être. (Réflexion)
tranquille.xav@gmail.com

7 réponses

1 2 3 4
Avatar
SAM
Le 08/03/12 19:31, Kalowycz a écrit :
Le 08/03/2012 17:42, SAM a écrit :
Le 08/03/12 17:11, Kalowycz a écrit :
Là c'est grave plus performant de stocker dans un fragment pour faire le
tripatouillage, promis juré !



intellectuellement, ça devrait
pratiquement, ça reste à voir



Je t'engage à consulter le banc d'essai de John Resig (leader de jQuery)
sur le sujet, c'est très parlant :
[http://ejohn.org/blog/dom-documentfragments/]



heu ... là ce sont 2 boucles qui ne sont pas bâties pareils

d'un côté on recrée (re-boucle) une série de clones
boucle x fois sur une autre boucle y fois ==> x * y

de l'autre on boucle direct un clone de la série
boucle y fois, puis boucle x fois ==> x + y

je ne pense pas que la "lenteur" y soit pour cause d'insertions
multiples successives dans le body déjà affiché.

Et pourtant ça date de juillet 2008 !



function norm() {
var t1 = new Date();
var div = document.getElementsByTagName("div");
for ( var i = 0; i < div.length; i++ ) {
for ( var e = 0; e < elems.length; e++ ) {
div[i].appendChild( elems[e].cloneNode(true) );
}
}
var t2 = new Date();
document.getElementById('inf').innerHTML = (t2-t1);
}

function norm2() {
var t1 = new Date();
var s = document.createElement('span');
for ( var e = 0, n = elems.length; e < n; e++ ) {
s.appendChild( elems[e] );
}
var div = document.getElementsByTagName("div");
for ( var i = 0, n = div.length; i < n; i++ ) {
div[i].appendChild( s.cloneNode(true) );
}
var t2 = new Date();
document.getElementById('inf').innerHTML = (t2-t1);
}

norm2 est 2 fois plus rapide (sur mon test)


Bon ... le fichier(*) des patelins de 6Mo
(*) il y aura sans doute avantage à le j-Zonner au lieu de le X-mèler



Même pas, on ne gagne vraiment que sur les fermeture de balise avec
JSON,



Je pensais à du jSon qu'en arrays (sans objects) donc sans étiquettes et
autant de caractères gagnés

PS: pour info, tes deux premiers liens semblent brisés, sur la page
[http://stephane.moriaux.pagesperso-orange.fr/truc/HttpRequest/v_2/?liens]



Pas impossible ... la page n'a pas été revue depuis 2006
Hop! réparé (jusqu'aux prochains changements)

c'est donc : https au lieu de http pour le 1er
<https://developer.mozilla.org/fr/AJAX/Premiers_pas>

Pour le 2nd, "openweb" y a été oublié ... ça ne facilite pas :-(
Mébon, ce n'est pas très grave puisqu'ils ont déplacé (ou supprimé ?)
leur article
<http://openweb.eu.org/articles/objet_xmlhttprequest>

--
Stéphane Moriaux avec/with iMac-intel
Avatar
SAM
Le 08/03/12 22:17, a écrit :

en fait, j'ai un test avec un bouton dans la page appelante qui va faire
un alert du contenu du div complet qui reçoit la réponse, et celui-là de
toute façon existait avant la requête.
quand j'ai eu undefinded sur ce div-là, j'ai compris :-)



quand on est en test il faut toujours faire :

if(document.getElementById('monTest'))
document.getElementById('monTest').value = 'blabla';

c a d scinder en lignes successives d'interrogations

là ça aurait dû capoter sur la ligne 2
et aurait permis de comprendre que très probablement c'est 'value' qui
posait problème

--
Stéphane Moriaux avec/with iMac-intel
Avatar
Matt...
Le Mon, 05 Mar 2012 22:29:13 +0100, >
a écrit:

Bonsoir,

j'utilise mootools pour exécuter une requête xmlhttp asynchr one.
dans le onsucces, je récupère le résultat de cette requ ête.
je souhaite modifier ce résultat:

la requête appelle un script php qui fait des choses puis calcule le
temps qu'il a mis pour le faire, tout ça construit un bout de pag e qui
est ensuite envoyé comme réponse, du classique.

pour le moment, lorsque j'affiche le résultat dans la page finale , le
temps d'exécution s'affiche en bas de page, c'est la dernièr e opération
faite par le script php.

je veux que ce résultat s'affiche en haut de la page (donc en pre mier
dans la réponse)

je pensais récupérer dans la réponse de la requête , avant de l'afficher
dans la page finale, le contenu du div qui affiche le temps d'exé cution
en bas, et le copier dans un div en haut de la page.

malheureusement, et c'est pas faute d'avoir cherché, je ne trouve pas
comment accéder aux éléments de la réponse de la r equête.

pourtant, je suis sûr qu'il existe une méthode simple et à ©légante pour
faire ça...
peut-être que je m'y prends très mal...
j'espère que quelqu'un pourra m'aiguiller :-)

par avance merci!




Bonjour,

Ce que tu récupères c'est de XHTML, XML ou autre.?

Est ce que tu le récupères avec responseText ou responseXML ?
Dans le premier cas : Faut parser ta réponse (traitement chaine de
caractères)
Dans le deuxième cas : Utilisation DOM.

Matt...

--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/
Avatar
Kalowycz
Le 09/03/2012 01:18, SAM a écrit :
heu ... là ce sont 2 boucles qui ne sont pas bâties pareils

d'un côté on recrée (re-boucle) une série de clones
boucle x fois sur une autre boucle y fois ==> x * y

de l'autre on boucle direct un clone de la série
boucle y fois, puis boucle x fois ==> x + y



Je pense que tu ne vois qu'un aspect du problème.
Certes, si tu ne regardes que le code JS, ton raisonnement est
infaillible (X*Y vs. X+Y).

Maintenant, je pose la question con : et l'API DOM du client web, elle
fait comment pour insérer un fragment sur chaque DIV ?
Réponse : elle boucle sur chaque n½ud du fragment !

On est là, en somme, dans le cas typique des langages de script, avec
lesquels on a souvent intérêt à appeler une fonction de niveau inférieur
(écrite en C ou équiv.), plutôt que d'essayer de recréer le traitement
au niveau du script.

Bon, on s'écarte du sujet, là.
Si tu veux développer, il faudra ouvrir un nouveau fil.

Cdlt,
Kal
Avatar
SAM
Le 09/03/12 10:28, Kalowycz a écrit :
Le 09/03/2012 01:18, SAM a écrit :
heu ... là ce sont 2 boucles qui ne sont pas bâties pareils



Je pense que tu ne vois qu'un aspect du problème.
Certes, si tu ne regardes que le code JS, ton raisonnement est
infaillible (X*Y vs. X+Y).

Maintenant, je pose la question con : et l'API DOM du client web, elle
fait comment pour insérer un fragment sur chaque DIV ?
Réponse : elle boucle sur chaque n½ud du fragment !



J'a rhen compris.

Dans l'exemple on insère un clone du fragment, y a pas à boucler sur les
éléments du fragment, non ?
D'autant qu'alors on en reviendrait au cas laborieux (1)



Maintenant ... l'API DOM de IE ...
p'têt' bien qu'il fait une copie du tout, puis une copie reconstruite
par bouclage, puis une comparaison des 2 histoire de voir s'il ne
pourrait pas gueuler à l'erreur

--
Stéphane Moriaux avec/with iMac-intel
Avatar
Tr
*Ecrit* *par* *SAM*:
Le 08/03/12 22:17, a écrit :

en fait, j'ai un test avec un bouton dans la page appelante qui va
faire
un alert du contenu du div complet qui reçoit la réponse, et
celui-là de
toute façon existait avant la requête.
quand j'ai eu undefinded sur ce div-là, j'ai compris :-)



quand on est en test il faut toujours faire :

if(document.getElementById('monTest'))
document.getElementById('monTest').value = 'blabla';

c a d scinder en lignes successives d'interrogations

là ça aurait dû capoter sur la ligne 2
et aurait permis de comprendre que très probablement c'est 'value'
qui posait problème



ok, je m'ensouviendrai, merci!

--
Prochain palier: Sortir du lot (proprement).

Avatar
Tr
*Ecrit* *par* *Matt...*:
Le Mon, 05 Mar 2012 22:29:13 +0100,
a écrit:

Bonsoir,

j'utilise mootools pour exécuter une requête xmlhttp asynchrone.
dans le onsucces, je récupère le résultat de cette requête.
je souhaite modifier ce résultat:

la requête appelle un script php qui fait des choses puis calcule
le temps qu'il a mis pour le faire, tout ça construit un bout de
page qui est ensuite envoyé comme réponse, du classique.

pour le moment, lorsque j'affiche le résultat dans la page finale,
le temps d'exécution s'affiche en bas de page, c'est la dernière
opération faite par le script php.

je veux que ce résultat s'affiche en haut de la page (donc en
premier dans la réponse)

je pensais récupérer dans la réponse de la requête, avant de
l'afficher dans la page finale, le contenu du div qui affiche le
temps d'exécution en bas, et le copier dans un div en haut de la
page.

malheureusement, et c'est pas faute d'avoir cherché, je ne trouve
pas comment accéder aux éléments de la réponse de la requête.

pourtant, je suis sûr qu'il existe une méthode simple et élégante
pour faire ça...
peut-être que je m'y prends très mal...
j'espère que quelqu'un pourra m'aiguiller :-)

par avance merci!




Bonjour,

Ce que tu récupères c'est de XHTML, XML ou autre.?

Est ce que tu le récupères avec responseText ou responseXML ?
Dans le premier cas : Faut parser ta réponse (traitement chaine de
caractères)
Dans le deuxième cas : Utilisation DOM.

Matt...



merci pour ces infos mais entre temps nous avons résolu mon problème
:-)

--
C'est quand ça fait chier de le faire qu'on rend vraiment un service.
(Réflexion)

1 2 3 4