IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Passer en paramètre ajax un tableau javascript


Sujet :

AJAX

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut [AJAX] Passer en paramètre ajax un tableau javascript
    Bonjour, je cherche à savoir si c'est possible de passer en paramètre ajax un tableau javascript, et qu'il soit interprété en tant que tel.

    Je m'explique. J'ai une page qui construit un graphique à partir d'un tableau javascript. Je tente de construire ce tableau dans une page php appelée en ajax (jusque là ça fonctionne), mais je ne sais pas comment renvoyer le tableau javascript pour qu'il soit interprété.

    J'arrive bien à créer mon tableau javascript à partir de données php, mais lorsque je retourne le résultat du tableau, il n'est pas interprété.

    C'est jouable ? Une idée ? Merci d'avance.

    Voici ma page ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function construisTableauJS($tableauPHP, $nomTableauJS){
    	echo $nomTableauJS." = new Array();";
    	for ($i=0; $i<count($tableauPHP); $i++) {
    		if (!is_array($tableauPHP[$i])) {
    			echo $nomTableauJS."[".$i."] = ".$tableauPHP[$i].";";
    		} else {
    			construisTableauJS($tableauPHP[$i], $nomTableauJS."[".$i."]");
    		}
    	}
    	return;
    }
     
    $varCulture = "EBM";
    $varEcheance = "2";
     
     
    $varCotation = mysql_query("SELECT * FROM ".$varCulture." ORDER BY timestamp ASC");
     
    	while ($varNtotal = mysql_fetch_array($varCotation)) {
    		$varVar2 = "varHistorique_".$varCulture.$varEcheance;
    		${$varVar2}[] = array($varNtotal['timestamp'], $varNtotal['echeance_'.$varEcheance]);
    		echo "<script type='text/javascript'>";
    		construisTableauJS($$varVar2, $varVar2);
    		echo "</script>";
    	}
     
    echo json_encode(array('requete'=>$varVar2));

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par nicolas2603
    je cherche à savoir si c'est possible de passer en paramètre ajax un tableau javascript, et qu'il soit interprété en tant que tel.
    Non, les données transitent via le protocole HTTP qui est sans état, ce qui fait que seules des données textuelles peuvent être échangées.
    En revanche, il y a dans la FAQ et dans les contributions des exemples pour "sérialiser" un tableau JavaScript et l'envoyer à un script PHP.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Ok, donc il faut que je le "sérialise" car il transite sous forme de chaine en fait. L'idée, c'est de sérialiser dans ajax et de l'envoyer via json sérialisé, ou au contraire d'envoyer la chaine, et ensuite de sérialiser le résultat obtenu ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Bon alors voici où j'en suis.
    1. la page qui va interpréter le tableau en javascript et qui appelle l'AJAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $.post('inc.php',
    	{ culture: num[0], echeance: num[1] },
    	function(data) {
    		var tableau = eval('('+data+')');
    		alert(tableau);				
    	}, 'json'
    );
    Et la page AJAX qui créé le tableau et le retourne sérialisé en JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($varNtotal = mysql_fetch_array($varCotation)) {
    	$varHistorique[] = array($varNtotal['timestamp'], $varNtotal['echeance_2');
    }
    echo json_encode($varHistorique);
    Lorsque je fais un alert basique, je vois bien toute mes valeurs passées, sous la forme x1, x2, x3, x4. Et lorsque je fais l'éval, je n'obtiens que la dernière valeur.

    Où est mon erreur ?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Dans ton $.post(), tu précises déjà que le résultat attendu est au format JSON, c'est donc jQuery qui se charge de transformer le résultat reçu en objet (et au passage, de façon plus propre que ton eval()...), du coup, refaire un eval() sur ce résultat est une erreur.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Bon j'ai pris en compte ce que tu m'as dit, et j'ai corrigé le tir en comprenant un peu mieux le fonctionnement. J'ai du coup trouvé une fonction de transformation qui m'a donné un résultat satisfaisant.

    1. la page qui va interpréter le tableau en javascript et qui appelle l'AJAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function array2json(arr) {
    var parts = [];
    var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');
    for(var key in arr) {
    	var value = arr[key];
    	if(typeof value == "object") {
    		if(is_list) parts.push(array2json(value));
    		else parts[key] = array2json(value);
    	} else {
    		var str = "";
    		if(!is_list) str = key + ':';
    		if(typeof value == "number") str += value;
    		else if(value === false) str += 'false';
    		else if(value === true) str += 'true';
    		else str += value;
    		parts.push(str);
    	}
    }
    var json = parts.join(",");
    if(is_list) return '[' + json + ']';
    return '{' + json + '}';
    }
     
    $.post('inc.php',
    { culture: num[0], echeance: num[1] },
    function(data) {
    	var tableau = array2json(data);				
    }, 'json'
    );
    2. la page AJAX qui créé le tableau et le retourne sérialisé en JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($varNtotal = mysql_fetch_array($varCotation)) {
    	$varHistorique[] = array($varNtotal['timestamp'], $varNtotal['echeance_2']);
    }
     
    echo json_encode($varHistorique);
    Merci pour l'aide apportée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Passer plusieurs paramètres
    Par verbose dans le forum jQuery
    Réponses: 2
    Dernier message: 07/05/2012, 19h08
  2. Passer l'indice d'un tableau Javascript vers PHP
    Par Hastur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/06/2009, 19h59
  3. Réponses: 3
    Dernier message: 16/05/2007, 10h03
  4. Servlet + AJAX : passer des paramètres
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/12/2006, 09h12
  5. [PHP-JS] passer des paramétre de php a javascript
    Par alexmorel dans le forum Langage
    Réponses: 7
    Dernier message: 08/10/2006, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo