2010-07-26 6 views
0

J'ai une variable $ visitRecord-> getReferallist() qui obtient la liste des médecins dans un tableau. J'ai besoin d'envoyer le tableau à un fichier php et faire une action foreach dans le fichier php .. comment puis-je envoyer cette variable de tableau dans le jquery. Ce code n'a pas fonctionné.envoyer tableau en utilisant jquery

function seekOpinion() 
    { 
    var queryUrl = "<?php echo $this->url(array('controller' => 'consultant', 'action' =>'opiniondoclist'));?>"; 
    $.post(queryUrl,{referal:'<?php echo $gotreferal; ?>',visitId:'<?php echo $gotvisitId; ?>',referalList:'<?php echo $visitRecord->getReferallist(); ?>'},function(data) 
    { 
      $('.opiniondoclistData').html(data); 
    }); 
      document.getElementById('opiniondoclistDiv').style.display = ""; 
    } 
+0

À quoi ressemble le code HTML généré? –

+0

@Milan Babuškov - Que je suis en train de formater. mais j'ai besoin d'obtenir le tableau correctement à l'arrière php. quand je dis d'imprimer echo $ _POST ['referalList'] dans la opiniondoclist. ça imprime simplement Array. rien d'autre ... – Hacker

Répondre

2

Votre problème est que vous travaillez avec un tableau en PHP.

echo $ visitRecord-> getReferallist(); // Renvoie un tableau de références. Lorsque vous transtypez le tableau en une chaîne en l'écrivant (parce que l'écho renvoie des chaînes), vous obtenez le texte "Array". Afin d'envoyer ceci sur le réseau (à partir de javascript via AJAX ($ .post)) vous devrez convertir votre liste de parrainage en une chaîne de caractères. Une méthode est la sérialisation.Vous pouvez convertir votre tableau en un "format de chaîne" en utilisant la fonction serialize(). www.php.net/serialize. Lorsque cela est reçu de PHP dans la requête AJAX, vous pouvez convertir votre tableau "formatable" en un tableau pur en utilisant la fonction unserialize (). www.php.net/unserialize.

Votre code devrait changer de

$ visitRecord-> getReferallist();

à

serialize (visitRecord- $> getReferallist());

Puis, quand il est reçu, vous devriez changer votre code de

$ = références $ _POST [ 'referalList']; // Version effilochable du tableau

à

$ = références unserialize ($ _ POST [ 'referalList']); // Tableau PHP pur

0
var sendData = 'referal=<?php echo $gotreferal; ?>&visitId=<?php echo $gotvisitId; ?>&referalList=<?php echo implode('-', $visitRecord->getReferallist()); ?>';  
$.post(queryUrl, sendData,function(data) { //etc 

Ensuite, le script de réception peut (en plus de toute aseptisation nécessaire):

$referalList = explode('-', $_POST['referalList']); 

Ne pas oublier de addslashes à toutes les variables que vous faisant écho si nécessaire

+0

comment cela fait-il une différence .. – Hacker

+0

Apologes, mal lu. Edité la solution. – Jhong

+0

... et encore quelques modifications. Ham-doigts aujourd'hui. – Jhong

1

Utilisez Serialize() pour transformer votre tableau en chaîne, envoyez-le, puis utilisez unserialize() pour le réintégrer dans un tableau en php;

Serialize()

0

PHP crée automatiquement une variable de tableau à partir d'une chaîne de requête, ou affiché des données, qui contient un « [] » à la fin du nom. Par exemple, vous pouvez faire un appel de chargement jQuery comme suit pour passer un tableau à PHP.

$('#target').load('index.php?foo[]=a&foo[]=b'); 

Du côté PHP, vous aurez un tableau appelé foo $ _GET

<?php 
echo 'I have ' . $_GET['foo'][0] . ' and ' . $_GET['foo'][1]; 
?> 

fonctions AJAX jQuery, par exemple $ .post, $ .get et $ .ajax peuvent passer des tableaux javascript comme ça dans leurs sections de données - assurez-vous juste de nommer la variable avec un "[]" à la fin pour que PHP sache comment la gérer.

1

Je pense que vous pouvez utiliser json_encode() pour coder le tableau comme une chaîne qui jquery sera en mesure de lire de nouveau comme un tableau javascript

EDIT: désolé, je ne l'ai pas lu votre question, je vois que vous ne voulez pas lire le tableau en javascript, mais en PHP donc probablement serialize() et unserialize() est mieux que json_encode() en supposant qu'il s'échappe correctement pour une utilisation avec javascript.

+0

Je pense que 'json_encode' est la meilleure option pour un tableau, car jQuery enverra en tant que tableau et PHP l'interprétera comme un tableau pour '$ _GET' ou' $ _POST'. Cela fonctionnera seulement avec des chaînes primitives comme valeurs, cependant. – strager

0

J'ai trouvé une solution sur ce problème ...

Utilisez cette fonction javascript ...

function js_array_to_php_array (a) 
{ 
    var a_php = ""; 
    var total = 0; 
    for (var key in a) 
    { 
     ++ total; 
     a_php = a_php + "s:" + 
      String(key).length + ":\"" + String(key) + "\";s:" + 
      String(a[key]).length + ":\"" + String(a[key]) + "\";"; 
    } 
    a_php = "a:" + total + ":{" + a_php + "}"; 

    return a_php; 
} 

un est le tableau que vous avez passé dans cette fonction puis .. sur votre php où vous obtenez le tableau de retour de cette fonction écrire ce code ...

$my_array = unserialize(urldecode(stripslashes($_COOKIE['php_array']))); 
// print_r ($my_array); 

Hope it helps ...

+0

hoy! Manie ..;) – Reigel

Questions connexes