OVH Cloud OVH Cloud

Problèmes XMLHttpRequest et variables JS

5 réponses
Avatar
Couscous grabIt
Hello !

J'ai une fonction qui me permet d'afficher le contenu d'un tableau :

- afficheTableau("maDiv", contenu)...


Ma variable "contenu" vient d'une requête XMLHttpRequest, et se présente
ainsi :

contenu = "<tr><td>ligne 1</td></tr><tr><td>ligne 2</td></tr>"; //(etc...)

Ma fonction afficheTableau() se présente brièvement comme ceci :

function afficheTableau(div, contenu) {
contenu_th = '<table align="center" id="interventions">'
+'<tr>'
+'<th width="30">N&deg;<\/th>'
+'<th width="120">Date<\/th>'
+'<th width="120">Client<\/th>'
+'<th width="160">Type<\/th>'
+'<th width="30">&nbsp;<\/th>'
+'<th width="30">&nbsp;<\/th>'
+'<th width="30">&nbsp;<\/th>'
+'<\/tr>';

document.getElementById(div).innerHTML = contenu_th + contenu ;
}

Jusqu'à présent, ma variable "contenu" contenait après chaque requête le
code d'un tableau HTML me permettant justement d'afficher ce tableau
avec son contenu.

Mais il y a eu du changement depuis le développement de ce projet et il
faudrait désormais lors de ma requête, que je récupère le contenu du
tableau - comme jusqu'à maintenant - mais également que je génère des
variables Javascript, dont les valeurs proviennent de PHP (via
XMLHttpRequest)... En gros ma variable se présenterait comme cela :

$contenu = "<tr><td>ligne 1</td></tr><tr><td>ligne 2</td></tr>";//(etc...)
$contenu .= "maVaraiableJS[1] = maValeurJS";
$contenu .= "maVaraiableJS[2] = maValeurJS2"; // Pour rappel, le .= est
la concaténation en PHP

Voilà... en gros pour résumer, je souhaite qu'à chaque requête
XMLHttpRequest, je puisse récupérer à la fois les lignes de mon tableau
(comme je le faisais jusqu'à maintenant), mais aussi que je puisse créer
en plus des variables Javascript (de type Array) relatives à chaque
ligne de mon tableau, et que ces variables soient directement prises en
compte par Javascript... Comprenez-vous ?

Quelle serait la solution à laquelle vous pensez en premier ?
Merci beaucoup pour votre aide...

5 réponses

Avatar
ASM
Voilà... en gros pour résumer, je souhaite qu'à chaque requête
XMLHttpRequest, je puisse récupérer à la fois les lignes de mon tableau
(comme je le faisais jusqu'à maintenant), mais aussi que je puisse créer
en plus des variables Javascript (de type Array) relatives à chaque
ligne de mon tableau, et que ces variables soient directement prises en
compte par Javascript... Comprenez-vous ?

Quelle serait la solution à laquelle vous pensez en premier ?



Ben ... que :
- ça m'a encore l'air du php peut-être pas trop bien pensé
-> pourquoi un table ? pourquoi du JS ?
- ce n'est pas jojo des cellules de titre vides
(y a des css pour gérer ça, au lieu d'y coller &nbsp;)
- $contenu a ses lignes plus courtes que celle de titre
- ou est le tbody ?
- que fabriques-tu à partir de ces variables JS ?
- je n'ai pas compris où était la difficulté,
du moment qu'on requeste un *.php "intelligent" qui va créer
les lignes du table, il doit savoir aussi créer les variables JS.
Non ?
Qu'elle est exactement la question ?
Finalité du truc-bazar en JS ? (il y a peut-être une autre soluce)

Merci beaucoup pour votre aide...


Là, comme ça ... y a rien à aider.

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Couscous grabIt
ASM nous a pondu :

Qu'elle est exactement la question ?
Finalité du truc-bazar en JS ? (il y a peut-être une autre soluce)


Là, comme ça ... y a rien à aider.



Tu as raison, je vais procéder d'une autre manière et je vais poster une
autre question concernant le même sujet, mais développé différemment.

Avatar
ASM
ASM nous a pondu :

Là, comme ça ... y a rien à aider.


Tu as raison, je vais procéder d'une autre manière et je vais poster une
autre question concernant le même sujet, mais développé différemment.


Si la question est l'interprétation du JS via responseText renvoyé par
XMLHttpRequest :
- inséré par innerHTML :
- Opera : OK
- IE : ?
- FF : nada,
à mon idée faudrait arriver à faire un createElement('script')
ou ajouter le(s) script(s) à ceux existants
document.getElementsByTagName('SCRIPT')[0].appendChild( blabla );

J'avais archivé une page de test à ce propos d'innerHTMLer ou non du JS
que j'ai bien entendu perdue :-(

Trouvé :
http://www.developpez.net/forums/showthread.php?t8898

Et voici ce qui fonctionne chez moi :

function afficheContents(url) {
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
var content = http_request.responseText;
document.getElementById('contenu').innerHTML = content;
var C = document.getElementById('contenu')
C = C.getElementsByTagName('SCRIPT');
if(
C.length>0 &&
navigator.appName.toLowerCase().indexOf('opera')<0
)
for(var i=0; i<C.length; i++) {
var s = document.createElement('SCRIPT');
s.type='text/javascript';
s.innerHTML = C[i].innerHTML;
document.body.appendChild(s);
}
}
else
{
alert('Un problème est survenu avec la requête.');
secours(url);
}
}
}


secour(url) {
if(confirm('Faut-il que la page de secours soit ouverte?'))
self.location = url; }

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé


Avatar
Bertrand B
Hello !

J'ai une fonction qui me permet d'afficher le contenu d'un tableau :

- afficheTableau("maDiv", contenu)...


Ma variable "contenu" vient d'une requête XMLHttpRequest, et se pré sente
ainsi :

contenu = "<tr><td>ligne 1</td></tr><tr><td>ligne 2</td></tr>"; //(et c...)

Ma fonction afficheTableau() se présente brièvement comme ceci :

function afficheTableau(div, contenu) {
contenu_th = '<table align="center" id="interventions">'
+'<tr>'
+'<th width="30">N&deg;</th>'
+'<th width="120">Date</th>'
+'<th width="120">Client</th>'
+'<th width="160">Type</th>'
+'<th width="30">&nbsp;</th>'
+'<th width="30">&nbsp;</th>'
+'<th width="30">&nbsp;</th>'
+'</tr>';

document.getElementById(div).innerHTML = contenu_th + contenu ;
}

Jusqu'à présent, ma variable "contenu" contenait après chaque req uête le
code d'un tableau HTML me permettant justement d'afficher ce tableau
avec son contenu.

Mais il y a eu du changement depuis le développement de ce projet et il
faudrait désormais lors de ma requête, que je récupère le conte nu du
tableau - comme jusqu'à maintenant - mais également que je génè re des
variables Javascript, dont les valeurs proviennent de PHP (via
XMLHttpRequest)... En gros ma variable se présenterait comme cela :

$contenu = "<tr><td>ligne 1</td></tr><tr><td>ligne 2</td></tr>";//(et c...)
$contenu .= "maVaraiableJS[1] = maValeurJS";
$contenu .= "maVaraiableJS[2] = maValeurJS2"; // Pour rappel, le .= est
la concaténation en PHP

Voilà... en gros pour résumer, je souhaite qu'à chaque requête
XMLHttpRequest, je puisse récupérer à la fois les lignes de mon t ableau
(comme je le faisais jusqu'à maintenant), mais aussi que je puisse cr éer
en plus des variables Javascript (de type Array) relatives à chaque
ligne de mon tableau, et que ces variables soient directement prises en
compte par Javascript... Comprenez-vous ?

Quelle serait la solution à laquelle vous pensez en premier ?


json

Merci beaucoup pour votre aide...


Avatar
Bertrand B

json

Développons un peu plus la réponse ;)


Json et ses dérivés sont un moyen sympa pour charger des objets
javascript complexe et facilement générable du coté php.

l'autre solution est de créer un objet xml pour transporter tes donné es
et faire du dom pour dépaqueter les informations


Je te laisse aller repomper dans les javascript de chtioblogue où
j'utilise les deux méthodes
(la méthode à la Json est de loin la plus simple d'utilisation)