Page 1 sur 1

ajax, gestion de window.history

Posté : 30 mars 2010, 16:50
par Nours312
Salut à tous !

je suis en train de coder un petit script de gestion des navigations Ajax. Le but est de pouvoir faire en sorte que lors du déclenchement des boutons back() et forward() de navigateur, nous puissions retrouver les informations ayant été utilisées par Ajax pour générer cette page ...

Tout d'abord, j'utilise prototype pour tout le script, mais la fin justifiant les moyens, si vous connaissez des scripts qui fonctionnent sous d'autres lib, je suis preneur (au moins pour les idées utilisées)

lors de la navigation, prototype utilises 2 arguments dans sa fonctions Ajax.Request(url, options)
Donc, en parallèle, je stocke dans un tableau ses éléments

this.request.push({url:url, obj:options});

ensuite, j'ai un formulaire et une iframe planqués dans la page, j'attribut formulaire.action = url et j'envoi le formulaire formulaire.submit() (naturellement, le formulaire pointe sur la frame et de ce fait, l'url de la frame change sans que cela n'apparaisse à l'écran.

Je stocke l'url de la page en cours de chargement (utilisée par la suite)

this.urlOnLoad = url ;

et j'envoi le traitement de la requete Ajax.


en parallèle de tout ceci, j'ai une fonction récurrente (0.1s) qui compare url en cours (this.urlCurrent) avec l'url de la frame

Si celles-ci ne sont pas identiques, nous vérifions la présence et comparons avec this.urlOnLoad
- en cas de succès (page nouvellement chargée) nous lançons une fonction qui va vider this.urlOnLoad et attribuer à this.urlCurrent la valeur de la page nouvellement appelée.
- en cas d'echec, nous nous trouvons devant une modification de la frame depuis le navigateur, et donc nous laçons une fonction qui va récupérer nos objets et lancer une nouvelle requete en incrémentant this.urlOnLoad (naturellement)

Tout ceci fonctionne bien pour les back() sous FireFox ...:D oui, la programmation est plus aisée ainsi !

L'objet de ce post est le suivant :

- Avez vous étés confronté à ceci ?
- la méthodologie employée semble-t-elle Bonne ?
- avez vous des suggestions pour modifier la navigation autrement qu'en se servant du formulaire ?
- sur quelles pistes pourrais-je partir pour etre compatible webkit et IE !?

Dans l'attente, merci ;)

Re: ajax, gestion de window.history

Posté : 30 mars 2010, 16:58
par Genova
Il y a une technique en Ajax pour naviguer dans un site via l'URL, c'est d'utiliser les ancres (par exemple www.monsite.com/index.php#mon_ancre).

Tu peux récupérer la valeur de cette ancre en Javascript, et à partir de là stoquer les paramètres de tes requêtes Ajax, ainsi par exemple tu aurais des URL du genre : http://www.monsite.com/index.php#param= ... am3=value3

L'avantage c'est que tu peux faire des liens directs vers les pages de ton site, il te suffit donc de stocker l'ancre dans ta pile d'historiques.

Re: ajax, gestion de window.history

Posté : 30 mars 2010, 17:03
par stealth35
ouai c'est swfaddress

Re: ajax, gestion de window.history

Posté : 30 mars 2010, 20:34
par Nours312
Lol .. M** ... c'est tout bete !... utiliser les ancres !... :oops:

c'est compatible IE6/7 ??

je vais remonter et tester ça merci dans tous les cas les gars !...

Re: ajax, gestion de window.history

Posté : 30 mars 2010, 20:47
par stealth35
ouai c'est compatible, c'est qu'utilise deezer par exemple ou colette

Re: ajax, gestion de window.history

Posté : 30 mars 2010, 22:54
par Nours312
Ho le boulet que je fait !...

bon, ça marche bien ... il me reste quelques Bug IE liés à l'encodage lors de la requete Ajax ... mais rien à voir avec le sujet !..

dès que tout fonctionne, je mettrais un lien vers le script, au cas ou ça intéresse Quelqu'un !...

Merci bien ;) .. bonne soirée !

Re: ajax, gestion de window.history

Posté : 31 mars 2010, 11:39
par Nours312
c'est fait : NavigationAjaxClass

Si ça vous intéresse ;)

@++

Re: ajax, gestion de window.history

Posté : 31 mars 2010, 11:45
par stealth35
cool =D>

ps : un petit coup de JsLint et ca sera parfait :wink:

Re: ajax, gestion de window.history

Posté : 31 mars 2010, 12:12
par Nours312
un petit coup de JsLint et ca sera parfait :wink:
Merci ;) ... j'ai nettoyé un peu ..; mais pour le reste, je ne vois pas trop e qui lui prend à jslint ^^ ... ce doit etre surement du à la method de prototype de gérer les classes !

Re: ajax, gestion de window.history

Posté : 31 mars 2010, 13:40
par stealth35
pour les globals ta pas en t'en occupé

pour ca :
Problem at line 75 character 13: Expected '{' and instead saw 'this'.

this.defParameters = arguments[0];
c'est parce que ta amis comme ca

Code : Tout sélectionner

if(arguments[0] !== undefined) this.defParameters = arguments[0];
et il attend ca

Code : Tout sélectionner

if(arguments[0] !== undefined){ this.defParameters = arguments[0]; }


c'est du jslint donc c'est hyper strict comme la version C, c'est surtout valable en C parce qu'au moment ou tu va compiler tu va avoir plein de ligne d'erreur (dommage que y'ai pas de version php, du moins aussi simple) :wink: