Page 1 sur 1

transmettre un tableau à AJAX

Posté : 26 nov. 2006, 16:12
par Frantz
Bonjour,

je souhaitais savoir s'il était possible de transmettre un
tableau à ajax.

ex :
var tab=new Array();
tab[]=1;
tab[]=2;

data="tab="+tab; // données récupérée en POST dans fichier php

Apparemment mon script ne fonctionne pas, avez vous une solution ?

Merci !!

Posté : 26 nov. 2006, 16:32
par Truc
Salut,
Si tu nous montrais le code en question on pourrait plus facilement répondre

re

Posté : 26 nov. 2006, 16:47
par Frantz
Salut truc,

Le principe est exactement le même que le code que je t'ai montré :

Code : Tout sélectionner

var pos = new Array(); var data=null; function modifajax() { var xhr_object = null; if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { document.write(xhr_object.responseText); eval(xhr_object.responseText); } } xhr_object.open("POST", "test.php", false); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send(data); } function LigneChoix(lig) { pos.push(lig.rowIndex); } function Ajout_tr() { data = "act=ajouter"; data = data+"&pos="+pos+"&table="+tableau.name; modifajax(); }
Quand je clic sur une ligne d'un tableau, j'ajoute sa position
dans les tableaux des positions nommé "pos" je souhaite ensuite
envoyer ce tableau dans data. Je sais que ma technique n'est pas
bonne. Je sais aussi qu'il existe une autre technique consistant
à ajouter à chaque fois à la variable data les elements du tableau
(ex : data="pos[0]="+pos[0]+"&pos[1]="+pos[1];)

Est ce qu'il existe une autre technique permettant de transmettre
directement un tableau ?

Merci

Posté : 26 nov. 2006, 17:58
par Truc
En passant "pos" comme tu le fait tu récupère quoi dans le fichier de traitement ?

effectue un echo $_POST['pos'] pour voir.

re

Posté : 26 nov. 2006, 18:45
par Frantz
Je recupère
1,2,5

Donc j'ai fais un explode puis print_r j'obtiens maintenant :
Array ( [0] => 1 [1] => 2 [2] => 5)

Mais le comportement est bizarre, des fois, je ne récupère
rien ??? étrange.

Je clic pourtant bien sur les lignes de mon tableau, elles se
mettent en grisée.

Je ne comprend pas ?? :idea:

Posté : 26 nov. 2006, 18:55
par Ajoloca
Bonjour,

Pour quoi ne transformes-tu pas ton tableau JS en une chaine de caractères avec un caractère séparateur qui te permette de faire un implode() coté PHP ?

De cette manière tu ne transmets qu'une variable.

re

Posté : 26 nov. 2006, 19:00
par Frantz
Comment fais-tu ça en javascript ?

Posté : 26 nov. 2006, 19:06
par Ajoloca
Re,

Tu utilises la méhode "join()" comme ceci

Code : Tout sélectionner

var maChaine = monTableau.join('|');
Tu obtiendras une chaîne de caractères du style
a|b|c|d
EDIT :
Si tu ne mets pas de caractère séparateur, c'est la virgule qui sera utilisé.

Posté : 26 nov. 2006, 21:14
par Truc
EDIT :
Si tu ne mets pas de caractère séparateur, c'est la virgule qui sera utilisé.
justement c'est la où j'ai voulu en venir... ça se fait tout seul, non ?

Si le comportement est aléatoire c'est peut être du aux données => caractères => '," ou autre

Posté : 26 nov. 2006, 21:20
par Ajoloca
C'est pour ça que je propose le pipe '|', mais c'est encore mieu d'utiliser une combinaison que l'on a peu de chances de trouver ''|~|".

re

Posté : 27 nov. 2006, 19:43
par Frantz
C'est bon, c'est résolu mon problème de resultats
aleatoire venait d'un pos = new Array() mal placé.

J'utilise donc la fonction join de javascript combinée avec la fonction
explode de PHP.


Merci !!