Page 1 sur 1

Passage d'un tableau PHP vers Javascript

Posté : 18 févr. 2009, 15:34
par Invité
Bonjour à tous,

Comme l'indique le titre du topic, j'aimerai récupérer dans une fonction Javascript un tableau de données PHP.

Le plus simple serait de passer la variable tableau comme une simple variable cependant il semblerait que cela ne soit pas aussi simple justement...

$tab[0] = "zero";
$tab[1] = "un";
$tab[2] = "deux";
$tab[x] = "x";

et sur un tag : onClick='javascript:fonctionjs($tab);

Aussi, si j'ai bien compris mes différentes recherches, il faut reconstruire le tableau PHP au niveau du Javascript

J'ai vu des codes partiels ou des codes complexes avec des tableaux multidimensionnels, associatifs ou encore des codes avec erreurs...

Y aurait il un volontaire pour écrire d'une manière simple, claire (et dans les règles de l'art) le passage d'un tableau PHP vers une fonction javascript ?

Un exemple complet mais avec un simple tableau unidimensionnel (mais potentiellement infini donc sous la forme d'un $tab[x] = x)

Nous pourrions partir sur la base de cet exemple :

Fichier JS:

function tableauphp()
{

}

---------------------

Fichier PHP:

<?php

// ** Tableau php
for ($i = 1; $i <= 1000; $i++)
{ $tab[$i] = $i; }

// ** bouton onclick pour passer le tableau $tab vers Javascript pour une exécution cliente
echo "<table><tr><th><input type='button' class='Input' onClick='javascript:tableauphp(qqchose)</th></tr></table>";

?>

Merci d'avance pour vos explications et démonstration :)

Posté : 18 févr. 2009, 18:51
par Ryle
Un petit rappel et un début de piste qui devrait sans doute répondre à ton besoin : PHP et javascript n'interragissent pas ensemble :)

PHP s'exécute sur le serveur et génère des pages html. Javascript s'exécute sur le poste client et permet de.. euh... plein de chose qu'on fait habituellement avec du javascript ;)

Tout ça pour dire que javascript ne peut appeler des fonctions ou utiliser des tableaux php. En revanche php peut générer le code de la page html, et donc tout ou partie du code javascript. Il te faut donc générer le code javascript dont tu as besoin, grace à php.

Le plus simple étant alors de générer un tableau javascript à partir de ton tableau php :
<script type="text/javascript">
<!--

// déclaration du tableau javascript
var tabJS = new Array( 
<?php

$tab = array(); // ton tableau php
$tab[0] = "zero"; 
$tab[1] = "un"; 
$tab[2] = "deux"; 
$tab[x] = "x"; 

// remplissage du tableau js par php
for ($i = 0; $i <= count($tab); $i++) { 
  if ($i!=0) // ajoute une virgule entre les éléments
    echo ', '

  echo "'" . $tab[$i] . "' \n"; // ajoute l'élément entre apostrophes puisqu'il s'agit de chaines 
} 
?>
); // fin du tableau js

//-->
</script>
Tu peux ensuite utiliser le tableau JS dans ton code javascript, y compris depuis une fonction ...
/**
 * Fonction javascript qui affiche dans une alert l'élément du tableau tabJS dont l'index est passé en argument
 */
function maFonction(indxDuTableau) {
   alert("La valeur est : " + tabJS[indxDuTableau]);
}

Posté : 20 févr. 2009, 16:10
par Invité
Je vois, bien que cela me fasse bizarre des voir un tag PHP dans la section Javascript .

Par contre je crois que pour un tableau qui fait partie d'un objet de classe c'est pas évident
($obj_classe->tab) car je pense que l'interpréteur ne vas comprendre quel est cet variable de classe...

Je vais alors plutôt tenter d'envoyer une chaine de mon tableau et la splitter au niveau du javascript.

Merci beaucoup pour ta réponse :D

Posté : 20 févr. 2009, 16:19
par Ryle
Ca peut paraitre bizare effectivement, mais souviens toi que PHP permet de générer la page html, et que la balise "<script>" qui apparait dans ton code source, n'est rien d'autre qu'une balise html :)

Pars du code source que tu veux obtenir en html/js. Tu verras qu'il te sera alors bien plus facile d'identifier le code que php doit te générer, et ainsi de le remplacer par ton code php :)

Posté : 20 févr. 2009, 17:09
par Invité
Oui c'est vrai tu as raison :)

Du coup, j'ai traité mon probleme de la maniere suivante :

----Partie PHP -----
// Assemblage de la chaine à transmettre
		$chaine = "";
		for ($ch = 0; $ch < count($this->fields); $ch++) 
			{	$chaine = $chaine.$this->fields[$ch].",";	}
			
		$chaine = substr($chaine,0,-1); 

//Onclick et passage des variables vers JS
echo "<input type='button' class='Input' onClick='javascript:create_champ3(1, $nbchamps, $largeur), changeText($largeur, $nbchamps, \"$chaine\")' value='ADD'>";
--- Partie JS ----
function changeText(largeur, nbfield, chaine)	
{	
	var tableau = chaine.split(',');
...

}
Sachant que maintenant tableau[0], tableau[1] etc... peuvent être traité coté JS

Dans ce cas de figure je m'en sors, plutôt proprement je trouve (?) :)