web-dev-qa-db-fra.com

Passer un tableau JavaScript à PHP via jQuery $ .ajax

Je veux manipuler un tableau JavaScript en PHP. Est-il possible de faire quelque chose comme ça?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

Activités est un tableau à une dimension comme:

var activities = ['Location Zero', 'Location One', 'Location Two'];

Le script ne se termine pas lorsque j'essaie ceci ... Comment puis-je résoudre ce problème?

76
krx
data: { activitiesArray: activities },

C'est tout! Maintenant, vous pouvez y accéder en PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
142
Valentin Golev

Vous voudrez encoder votre tableau au format JSON avant de l’envoyer, ou vous obtiendrez simplement des déchets indésirables à l’autre bout.

Puisque tout ce que vous envoyez est le tableau, vous pouvez simplement faire:

data: { activities: activities }

qui convertira automatiquement le tableau pour vous.

Voir ici pour plus de détails.

11
jvenema

Vous devez transformer cela en une chaîne. Vous pouvez le faire en utilisant la méthode stringify de la bibliothèque JSON2.

http://www.json.org/

http://www.json.org/js.html

Le code ressemblerait à quelque chose comme:

var myJSONText = JSON.stringify(myObject);

Alors 

['Location Zero', 'Location One', 'Location Two'];

Va devenir:

"['Location Zero', 'Location One', 'Location Two']"

Vous devrez vous référer à un gourou PHP pour savoir comment gérer cela sur le serveur. Je pense que d'autres réponses ici intimes une solution.

Les données peuvent être renvoyées du serveur de la même manière. C'est à dire. vous pouvez le transformer en objet.

var myObject = JSON.parse(myJSONString);
10
James Wiseman

Je sais qu'il est peut-être trop tard pour répondre à cette question, mais cela a très bien fonctionné pour moi:

  1. Stringify votre objet javascript (json) avec var st = JSON.stringify(your_object);

  2. Transmettez vos données POST en tant que "chaîne" (peut-être en utilisant jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Décodez vos données lors du traitement côté serveur: $data = json_decode($_POST['data']);

C'est ça ... vous pouvez utiliser librement vos données.

Les tableaux multidimensionnels et les tableaux simples sont traités comme des tableaux normaux. Pour y accéder, faites simplement le $foo[4] normal.

Les tableaux associatifs (objets javsacript) sont traités comme des objets php (classes). Pour y accéder, faites-le comme une classe: $foo->bar.

9
lu1s

Utiliser la fonction JQuery Serialize

http://docs.jquery.com/Ajax/serialize

La sérialisation est généralement utilisée pour préparer les données d'entrée de l'utilisateur doivent être enregistrées sur un serveur. Les données sérialisées sont dans un format standard qui est compatible avec presque tout le côté serveur langages de programmation et cadres.

1
Gazzer

Je devrais être comme ça:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
1
masterdany88

Cela a fonctionné pour moi: 

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

Et ceci pour votrePHP:

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}
0
I.Tyger

Utilisez la fonctionnalité intégrée PHP de l'ajout de l'opérande de tableau au nom de la variable souhaitée.

Si nous ajoutons des valeurs à un tableau Javascript comme suit:

acitivies.Push('Location Zero');
acitivies.Push('Location One');
acitivies.Push('Location Two');

Il peut être envoyé au serveur comme suit:

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

Notez les guillemets autour des activités []. Les valeurs seront disponibles comme suit:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
0
chelista

En effet, PHP lit votre valeur sous forme de chaîne. Si je ne veux pas transmettre mes données en tant qu'objet (comme dans les réponses précédentes, elles conviennent également), je le fais simplement dans mon PHP:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

La dernière ligne divise la chaîne en bits après chaque virgule. Maintenant, $ activitiesArray est aussi un tableau. Cela fonctionne même s'il n'y a pas de virgule (un seul élément dans votre tableau javascript).

Bonne codage!

0
Hawthorn