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?
data: { activitiesArray: activities },
C'est tout! Maintenant, vous pouvez y accéder en PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
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.
Vous devez transformer cela en une chaîne. Vous pouvez le faire en utilisant la méthode stringify de la bibliothèque JSON2.
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);
Je sais qu'il est peut-être trop tard pour répondre à cette question, mais cela a très bien fonctionné pour moi:
Stringify votre objet javascript (json) avec var st = JSON.stringify(your_object);
Transmettez vos données POST en tant que "chaîne" (peut-être en utilisant jQuery: $.post('foo.php',{data:st},function(data){... });
$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
.
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.
Je devrais être comme ça:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
function(response, status, xhr) {
alert("POST returned: \n" + response + "\n\n");
})
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;
}
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';
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!