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

divers problemes Ajax

19 réponses
Avatar
Thief13
Bonjour à tous,

Je vien a vous, car j'ai décidé d'utiliser Ajaxsur 1 des projets sur
lesquelles je travaille.

Le probleme, c'est qu'avants de commencer je n'avais aucune notion de
JavaScript.

Pour me faciliter le travail, j'ai donc fait appel à la librairie
Mootools pour me décharger un peut.

mon organistion est la suivante : le site fonctionne avec et sans ajax.
Toute les page sont généré avec le fichier page.php

le get id donne la page qui nous interresse, et le get ajax détermine si
la page est appelé en ajax ou non.

se qui fait que sans javascript la page est appellé comme ça :
page.php?id=1&ajax=0

et avec javascript comme ça :
page.php?id=1&ajax=1

en fonction de $_GET['ajax'], page.php retourne la totalité de la page,
ou ne retourne que le contenu de la div du contenu.

Mes problemes sont les suivants :

Quand le client navigue sur le site en ajax, si jamais il veut revenir
en arriere avec les fleches du navigateurs, celles ci le redirige vers
la dernière requette non ajax. Ce qui fait que la navigation dans le
site est bien moin ergonomique à mon sens. Est il possible d'écrire dans
l'historique en javascript ? le site fonctionnant a la foit avec et sans
ajax, celà permetrait à la personne de revenir en arriere, meme en
chargent toute la page, mais au moin, correctement.

Dans la meme vene, avec les requette ajax, l'url n'est pas changé,
résultat, si la personne qui navigue veut faire un copier coller de
l'url de la page qui l'interresse, celà ne la redirigera pas du tout sur
la ressource qui l'interresse pour peut qu'elle ai navigué un peut grace
à Ajax avant... Et de plus, si elle actualise, elle ne fera
qu'actualiser la page avant les requette ajax. est il possible de palier
à ça aussi ?

autre probleme : certaines page ont besoin d'appeler un javascript
spécifique, que je ne peut inclure systématiquement. Cepandant, quand le
javascript a été inclut en Ajax, il ne fonctionne pas... Y aurait il une
solution à ça aussi ?

Je vous remerci beaucoup par avance, car je galaire depuis un moment sur
tout ces problemes...

10 réponses

1 2
Avatar
ASM
En réponse à Thief13 qui écrivit, en date du : 12/08/07 22:02, le
message suivant :
Bonjour à tous,

Je vien a vous, car j'ai décidé d'utiliser Ajaxsur 1 des projets sur
lesquelles je travaille.

Pour me faciliter le travail, j'ai donc fait appel à la librairie
Mootools pour me décharger un peut.


Je ne sais si une librairie est vraiment "utile" pour ne faire que du
simple request ... ? !

mon organistion est la suivante : le site fonctionne avec et sans ajax.
Toute les page sont généré avec le fichier page.php

le get id donne la page qui nous interresse, et le get ajax détermine si
la page est appelé en ajax ou non.

se qui fait que sans javascript la page est appellé comme ça :
page.php?id=1&ajax=0


On peut bien se passer du double envoi (JS !JS) c'est au navigateur de
s'en soucier :

<a href="?page2" onclick="return ajax(this);">page 2</a>

Si pas de JS le lien est envoyé normalement (le fichier php est lu)
Si JS l'appel Ajax est lancé et le lien HTML annulé (fichier php zappé)
(l'Ajax peut faire appel à un autre fichier php spécifique)

et avec javascript comme ça :
page.php?id=1&ajax=1
en fonction de $_GET['ajax'], page.php retourne la totalité de la page,
ou ne retourne que le contenu de la div du contenu.


Il suffit de n'avoir un php "intelligent" qu'au niveau du div
d'insertion, si le JS est activé et la requête reconnue le fichier php
ne sera pas lu et seul le fichier à inclure sera appelé.

(la fonction de requête peut lancer un fichier php différent de celui
déjà affiché (et principal) qui ira chercher le bon fichier requis)

Mes problemes sont les suivants :

Quand le client navigue sur le site en ajax, si jamais il veut revenir
en arriere avec les fleches du navigateurs, celles ci le redirige vers
la dernière requette non ajax.


? vraiment ?
Oui, en effet.

Ce qui fait que la navigation dans le
site est bien moin ergonomique à mon sens. Est il possible d'écrire dans
l'historique en javascript ?


Je ne pense pas.

le site fonctionnant a la foit avec et sans
ajax, celà permetrait à la personne de revenir en arriere, meme en
chargent toute la page, mais au moin, correctement.


Le visiteur n'a qu'à désactiver son JS ! Non mais !

Dans la meme vene, avec les requette ajax, l'url n'est pas changé,
résultat, si la personne qui navigue veut faire un copier coller de
l'url de la page qui l'interresse, celà ne la redirigera pas du tout sur
la ressource qui l'interresse pour peut qu'elle ai navigué un peut grace
à Ajax avant... Et de plus, si elle actualise, elle ne fera
qu'actualiser la page avant les requette ajax. est il possible de palier
à ça aussi ?


Non.
Du moins si, ce doit être +/- possible mais cela reviendrait à faire
naviguer via JS comme si on était en mode non-JS (alors ... pourquoi
choisir Ajax ?).

autre probleme : certaines page ont besoin d'appeler un javascript
spécifique, que je ne peut inclure systématiquement. Cepandant, quand le
javascript a été inclut en Ajax, il ne fonctionne pas... Y aurait il une
solution à ça aussi ?


Rien compris ...
Pourquoi ne pas pouvoir inclure ce(s) JS spécifique(s) à la page
principale PHP ?
(ils ne sont chargés qu'une foi)

Pour répondre à la question, le JS chargé via Ajax ne fonctionne pas ...
il n'y a qu'à le faire charger en JS "normal" en prévoyant la chose dans
le lien de requête.

<a href="?p12" onclick="chargeJS('truc.js') return ajax(this);">
page 12</a>

function chargeJS(fichier) {
var scrpt = document.createElement('SCRIPT');
scrpt.type="text/javascript";
scrpt.src=fichier;
document.getElementsByTagName('HEAD')[0].appendChild(scrpt);
}

Pas certain que ça fonctionne avec IE ...
Voir tableau récap de différentes méthodes suivant les navigateurs :
http://members.aol.com/_ht_a/hikksnotathome/loadJSFile/

Je vous remerci beaucoup par avance, car je galaire depuis un moment sur
tout ces problemes...


Voir ma tentative navigable avec ET sans JS (via SSI) :
http://stephane.moriaux.perso.orange.fr/truc/HttpRequest/v_1/
à essayer avec et sans JS.

Ou bien :
http://stephane.moriaux.perso.orange.fr/truc/HttpRequest/v_2/
qui propose menu JS et menu HTML
et liens vers sources causant de XHR :
http://stephane.moriaux.perso.orange.fr/truc/HttpRequest/v_2/?liens

Avatar
Thief13

Je ne sais si une librairie est vraiment "utile" pour ne faire que du
simple request ... ? !

Outre le fait que XHR est appelé diféremment entre IE et Firefox,

Mootools ne me sert pas qu'a ça

On peut bien se passer du double envoi (JS !JS) c'est au navigateur de
s'en soucier :

<a href="?page2" onclick="return ajax(this);">page 2</a>

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise

html ont la peau dure à ce que je voi...

Et puis ça n'a rien a voir avec ce que je dit, merci quand meme pour
l'effort...

Si pas de JS le lien est envoyé normalement (le fichier php est lu)
Si JS l'appel Ajax est lancé et le lien HTML annulé (fichier php zappé)
(l'Ajax peut faire appel à un autre fichier php spécifique)


Il suffit de n'avoir un php "intelligent" qu'au niveau du div
d'insertion, si le JS est activé et la requête reconnue le fichier php
ne sera pas lu et seul le fichier à inclure sera appelé.

(la fonction de requête peut lancer un fichier php différent de celui
déjà affiché (et principal) qui ira chercher le bon fichier requis)


Et bin non, c'est bien ce que je dit, rien à voir : c'est le meme
fichier qui genere soit la page, soit juste le contenu qui nous
interresse en fonction du contenu du paramattre ajax, qui ne coute pas
vraiment bien chere à ajouter dans mon URL...
Pour moi celà n'est pas un probleme.

Ce qui fait que la navigation dans le
site est bien moin ergonomique à mon sens. Est il possible d'écrire dans
l'historique en javascript ?


Je ne pense pas.


en effet, mais heureusement que quelquepart une personne compétante m'a
recommendé ça :
http://digitarald.de/project/historymanager/


Le visiteur n'a qu'à désactiver son JS ! Non mais !


Merci pour cette réflexion intelligente. Et comment fait un aveugle qui
navigue avec un lecteur de texte qui ne marche pas avec javascript ?

Non.
Du moins si, ce doit être +/- possible mais cela reviendrait à faire
naviguer via JS comme si on était en mode non-JS (alors ... pourquoi
choisir Ajax ?).


ha parce que pour toi, l'interret et la particularité de l'Ajax, c'est
d'être privé de l'historique de navigation ?

Enfin, pour ceux qui ne considèrent pas ça comme un avantage,
re : http://digitarald.de/project/historymanager/

Rien compris ...
Pourquoi ne pas pouvoir inclure ce(s) JS spécifique(s) à la page
principale PHP ?
(ils ne sont chargés qu'une foi)



tout simplement parce que c'est su Javascript qui ne concerne que le
contenu en cours. Heureusement une personne avisé m'a recommendé l'usage
de la commande eval() qui résous ce probleme là.


Avatar
Pierre Goiffon
Thief13 wrote:
<a href="?page2" onclick="return ajax(this);">page 2</a>

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise

html ont la peau dure à ce que je voi...
(...)

Est il possible d'écrire dans
l'historique en javascript ?
Je ne pense pas.



en effet, mais heureusement que quelquepart une personne compétante m'a
recommendé ça :
(...)

Heureusement une personne avisé m'a recommendé l'usage
de la commande eval() qui résous ce probleme là.


ASM est un contributeur très prolifique de ce forum, il ne cherchait
qu'à vous aider, votre réponse est en tout point détestable ! On ne peut
pas deviner à votre place vos attentes, et si une réponse ne vous
convient pas ce n'est pas pour cela qu'elle n'est pas pertinente ou
inutile aux autres. Merci de revoir votre attitude.



Avatar
Delf
Thief13 avait écrit le 28/08/2007 :

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise
html ont la peau dure à ce que je voi...


Ceci n'est pas ironique : l'attribut onclick n'est pas recommandé ?
Pourquoi. Je l'utilise assez fréquemment...

tout simplement parce que c'est su Javascript qui ne concerne que le
contenu en cours. Heureusement une personne avisé m'a recommendé l'usage
de la commande eval() qui résous ce probleme là.


J'crois que eval() n'est pas près recommandée par contre, à confirmer.
Merci.

--
Delf

Avatar
loiseauthierry
Delf wrote:

J'crois que eval() n'est pas près recommandée par contre, à confirmer.


Je pense plutôt qu'il faut l'utiliser avec prudence :-)

Thierry
--
4 Calculs & Astronomie en Javascript : <http://astrophoto.free.fr>
3 " Il y a 10 sortes de personnes sur Terre : ceux qui connais-
2 sent le système binaire et ceux qui ne le connaissent pas "
1....'....12.....'....24.....'....36.....'....48.....'....60.....'....72

Avatar
Laurent vilday
On peut bien se passer du double envoi (JS !JS) c'est au navigateur de
s'en soucier :

<a href="?page2" onclick="return ajax(this);">page 2</a>

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise

html ont la peau dure à ce que je voi...


Non, rien à voir. Juste un exemple rapide du concept énoncé. C'est tout.

Et puis "onclick" n'est pas banni, selon la DTD utilisée il est tout à
fait acceptable. Ou alors, peut être que tu fais du XHTML strict !!! Si
tel est le cas, n'essayes pas de faire geek, reviens dans la réalité et
retournes sur du bon vieux HTML4.01. XHTML est mort né, il ne faut pas
l'utiliser.

Et puis ça n'a rien a voir avec ce que je dit, merci quand meme pour
l'effort...


Ben euh Stéphane te signalais juste comme ça en passant que ça semble
bizarre d'appeler une page par file.php?id=1&ajax=0 ou
file.php?id=1&ajax=1 selon le type de demande. Le ajax=0 semble
superflu. L'exemple onclick n'était là que pour te faire pointer du
doigt cette subtilité. Tu le prends mal, tant pis.

(la fonction de requête peut lancer un fichier php différent de celui
déjà affiché (et principal) qui ira chercher le bon fichier requis)


Et bin non, c'est bien ce que je dit, rien à voir : c'est le meme
fichier qui genere soit la page, soit juste le contenu qui nous


Et alors ? Suis en bonté ce soir : url_rewrite peut-être ?

interresse en fonction du contenu du paramattre ajax, qui ne coute pas
vraiment bien chere à ajouter dans mon URL...
Pour moi celà n'est pas un probleme.


Et bien si ce n'est pas un problème, tout va bien. On en reparlera dès
qu'il te faudra ajouter ton paramètre GET à une requête POST.

Ce qui fait que la navigation dans le
site est bien moin ergonomique à mon sens. Est il possible d'écrire dans
l'historique en javascript ?
Je ne pense pas.



en effet, mais heureusement que quelquepart une personne compétante m'a
recommendé ça :
http://digitarald.de/project/historymanager/


Le sous entendu ne me plait guère ici !!!

D'autant que Stéphane à raison :

1) NON il n'est pas possible d'écrire dans l'historique en javascript

2) la soit disant personne compétente ne fait que recommander
l'utilisation d'une énième librairie qui manipule bêtement la propriété
"hash" de l'objet "top.location". M'enfin chacun son appréciation de la
compétence, n'est-ce pas ?

3) Aucun d'entre nous n'est ici pour *ton* besoin. Ici c'est une zone de
discussion, on est la pour discuter. On est pas sur un forum payant de
résolution de tes problèmes javascript. Que ça ne réponde pas totalement
à ton besoin c'est dommage mais pas réprimandable. Si ça ne te conviens
pas, tu peux toujours aller faire un tour ailleurs tu sais !

Le visiteur n'a qu'à désactiver son JS ! Non mais !


Merci pour cette réflexion intelligente. Et comment fait un aveugle qui
navigue avec un lecteur de texte qui ne marche pas avec javascript ?


Wow, je suis impressionné par la profondeur d'une remarque si intelligente.

Puisqu'il n'a pas javascript, où est son problème ? Son bouton "back" ne
marche pas ? Je croyais que le site était JS *et* no JS

Du moins si, ce doit être +/- possible mais cela reviendrait à faire
naviguer via JS comme si on était en mode non-JS (alors ... pourquoi
choisir Ajax ?).


ha parce que pour toi, l'interret et la particularité de l'Ajax, c'est
d'être privé de l'historique de navigation ?


Pffff...

Parce que pour toi l'intérêt d'AJAX c'est quoi STP ?

Si ce n'est là que pour se prendre la tête comme tu le fais sur ton site
juste pour pouvoir avoir le pins "regardes, je fais de l'AJAX qui sert à
rien, j'suis un geek". Autant abandonner tout de suite et rester avec
des bêtes structures HTML statiques !

Ceci dit, une particularité d'AJAX est *effectivement* d'être privé de
l'historique de navigation. C'est comme ça, c'est une de ses spécificités !

Rien compris ...
Pourquoi ne pas pouvoir inclure ce(s) JS spécifique(s) à la page
principale PHP ?
(ils ne sont chargés qu'une foi)



tout simplement parce que c'est su Javascript qui ne concerne que le
contenu en cours. Heureusement une personne avisé m'a recommendé l'usage
de la commande eval() qui résous ce probleme là.


Lol, pas envie de rencontrer cette personne avisée. Pour qu'il en vienne
à te *recommander* l'usage du eval(), je me dis qu'elle n'est pas si
recommandable que ça.

Bon allez, je suis trop bon, je vais réfléchir 15 secondes à ton problème.

Il n'existe actuellement aucune solution fiable à 100%. Tout simplement
parce que le "infamous" eval() va entre autre faire voler en éclat les
scopes d'exécution. Et les autres "solutions" envisagées ne sont pas
plus fiables.

<http://groups.google.fr/group/comp.lang.javascript/browse_frm/thread/7120355459a853f1>

En considérant que le "problème" est l'insertion de code javascript à
travers un réponse XHR (car même si tu es persuadé d'avoir correctement
exprimé ton besoin, saches que ce n'était *pas* le cas).

Il faudra nécessairement passer par une transformation de la structure
de la réponse XHR et par la création de fichier js individuels qui
pourront ensuite être insérés ou retirés du document selon les
instructions reçus.

Pas envie de coder pour toi, et oui tu m'as passablement mis en colère
avec ta réponse à Stéphane, mais on a déjà discuté ici de l'insertion
dynamique de script, te suffis de chercher.

Bien qu'aucune démonstration du problème (url ?) ni aucune ligne de code
n'ait été proposée, je suppose à la lecture confuse de ton post initial
que tu reçois tout le nouveau contenu HTML par la réponse XHR et que le
script remplace directement un quelconque div.innerHTML présent sur la page.

C'est cette structure là qu'il va te falloir revoir.

Mais bon, j'imagine que tu t'en fou passablement et que ton eval() te
suffis largement.

Très bien, au revoir donc ou adieu, c'est selon.

--
laurent



Avatar
Bruno Desthuilliers
Thief13 avait écrit le 28/08/2007 :

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise
html ont la peau dure à ce que je voi...



Ceci n'est pas ironique : l'attribut onclick n'est pas recommandé ?
Pourquoi. Je l'utilise assez fréquemment...


Parce qu'il est préférable (AMHA) d'attacher les gestionnaires
d'évènement directement depuis le code Javascript. Il est possible
d'avoir une appli intensément ajaxifiée sans qu'il y ait la moindre
ligne de javascript dans le html - exception faite bien sûr de
l'inclusion (via l'attribut src de la balsie script) des fichiers
sources javascript dans le <head />

Un des intérêts de cette approche est qu'on ne pollue pas le marquage
(html) avec du code. Ca semble un peu puriste comme argument, mais dans
la pratique ça peut nettement simplifier la maintenance.

Un autre intérêt est que de cette façon, la gestion des évènements est
beaucoup plus fine - entre autre, on peut choisir de laisser l'évènement
se propager ou non, attacher plusieurs gestionnaires d'évènement au même
évènement, etc.

tout simplement parce que c'est su Javascript qui ne concerne que le
contenu en cours. Heureusement une personne avisé m'a recommendé l'usage
de la commande eval() qui résous ce probleme là.



J'crois que eval() n'est pas près recommandée par contre, à confirmer.


Disons que ce n'est que très rarement la meilleure solution...


Avatar
Pierre Goiffon
Laurent vilday wrote:
Et puis "onclick" n'est pas banni, selon la DTD utilisée il est tout à
fait acceptable.


A ma connaissance onClick existe dans toutes les versions de HTML 4 et
XHTML 1.0 ou 1.1 !

HTML 4.01 strict :
http://www.w3.org/TR/html4/strict.dtd

XHTML 1.0 strict :
http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict

XHTML 1.1 :
http://www.w3.org/TR/xhtml11/changes.html#a_changes


Pas envie de coder pour toi, et oui tu m'as passablement mis en colère
avec ta réponse à Stéphane


Oui, une telle attitude est vraiment désolante.

Avatar
Mickaël Wolff
Laurent vilday wrote:
Et puis "onclick" n'est pas banni, selon la DTD utilisée il est tout à
fait acceptable.


A ma connaissance onClick existe dans toutes les versions de HTML 4 et
XHTML 1.0 ou 1.1 !


Je ne vois pas de référence à onClick, mais plutôt onclick ;)

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org


Avatar
ASM
En réponse à Laurent vilday qui écrivit, en date du : 28/08/07 21:26,
et en réponse à quelques autres :
On peut bien se passer du double envoi (JS !JS) c'est au navigateur de
s'en soucier :

<a href="?page2" onclick="return ajax(this);">page 2</a>

Haaa, les bonne vielle mauvaise partique genre onclick dans la balise

html ont la peau dure à ce que je voi...


Non, rien à voir. Juste un exemple rapide du concept énoncé. C'est tout.


Toutafé.

Ce n'est pas évident de se faire comprendre, surtout si le lecteur ne
pense pas à prendre du recul et continue à regarder par le bout de *sa*
lorgnette ...

M'enfin ... j'espère qu'il saura lire vos autres réponses d'un autre
oeil (peut-être un peu reposé après qques vacances ?) et essaiera d'en
tirer profit (ce dont je doute un peu, vu l'étroitesse de la réflexion
générale qui montre un notable manque de connaissances de base).
Ouf! on a été dispensé de voir ses fichiers php !

(la fonction de requête peut lancer un fichier php différent de celui
déjà affiché (et principal) qui ira chercher le bon fichier requis)


Et bin non, c'est bien ce que je dit, rien à voir : c'est le meme
fichier qui genere soit la page, soit juste le contenu qui nous


Et alors ? Suis en bonté ce soir : url_rewrite peut-être ?


Je continue à ne pas comprendre que le XHR ait à *systématiquement*
charger un même fichier qui ira chercher (générer ?) celui requis alors
que c'est l'interet premier d'Ajax de passer par dessus ces redondades.

en fonction du contenu du paramattre ajax, qui ne coute pas
vraiment bien chere à ajouter dans mon URL...
Pour moi celà n'est pas un probleme.



Pour moi si.
C'est mésuser du matériaux (html+js).

Le visiteur n'a qu'à désactiver son JS ! Non mais !


Merci pour cette réflexion intelligente. Et comment fait un aveugle qui
navigue avec un lecteur de texte qui ne marche pas avec javascript ?


Wow, je suis impressionné par la profondeur d'une remarque si intelligente.


Quand je dis "étroitesse" !


Très bien, au revoir donc ou adieu, c'est selon.


Perso, je suis peinard : je n'ai pas ses posts ... ;-)
(même celui d'origine a expiré)

.



1 2