J'ai tableau fait par la fonction .Push . Dans le tableau est de très grandes données. Quelle est la meilleure façon d’envoyer cela au script PHP?
dataString = ??? ; // array?
$.ajax({
type: "POST",
url: "script.php",
data: dataString,
cache: false,
success: function(){
alert("OK");
}
});
script.php:
$data = $_POST['data'];
// here i would like use foreach:
foreach($data as $d){
echo $d;
}
Comment est le meilleur moyen pour cela?
Encodez votre chaîne de données en JSON.
dataString = ??? ; // array?
var jsonString = JSON.stringify(dataString);
$.ajax({
type: "POST",
url: "script.php",
data: {data : jsonString},
cache: false,
success: function(){
alert("OK");
}
});
Dans votre PHP
$data = json_decode(stripslashes($_POST['data']));
// here i would like use foreach:
foreach($data as $d){
echo $d;
}
Remarque
Lorsque vous envoyez des données via POST, il doit s'agir d'une paire de clés.
Ainsi
data: dataString
est faux. Au lieu de faire:
data: {data:dataString}
dataString = [];
$.ajax({
type: "POST",
url: "script.php",
data:{data: $(dataString).serializeArray()},
cache: false,
success: function(){
alert("OK");
}
});
Les données de la fonction jQuery ajax()
accepte les objets anonymes en entrée, voir documentation . Voici un exemple de ce que vous recherchez:
dataString = {key: 'val', key2: 'val2'};
$.ajax({
type: "POST",
url: "script.php",
data: dataString,
cache: false,
success: function(){
alert("OK");
}
});
Vous pouvez également écrire vous-même une requête POST/GET, telle que key=val&key2=val2
, mais vous devrez gérer vous échapper, ce qui est peu pratique.
dataString suggère que les données soient formatées dans une chaîne (et éventuellement délimitées par un caractère).
$data = explode(",", $_POST['data']);
foreach($data as $d){
echo $d;
}
si Date, String n'est pas une chaîne mais implique un tableau (ce que votre question indique), utilisez JSON.
Si vous avez essayé d’envoyer un tableau à une dimension et que jquery le convertissait en valeurs séparées par des virgules> :(, suivez le code ci-dessous et un tableau réel sera soumis} à php
et pas tous les taureaux séparés par une virgule ** il.
Supposons que vous deviez attacher un seul tableau de dimensions nommé myvals
.
jQuery('#someform').on('submit', function (e) {
e.preventDefault();
var data = $(this).serializeArray();
var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose
for (i = 0; i < myvals.length; i++) {
data.Push({
name: "myvals[]", // These blank empty brackets are imp!
value: myvals[i]
});
}
jQuery.ajax({
type: "post",
url: jQuery(this).attr('action'),
dataType: "json",
data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t.
success: function (r) {
...
Maintenant dans php
quand vous faites cela
print_r($_POST);
Tu auras ..
Array
(
[someinputinsidetheform] => 023
[anotherforminput] => 111
[myvals] => Array
(
[0] => 21
[1] => 52
[2] => 13
[3] => 24
[4] => 75
)
)
Pardon, mon langage, mais il y a énormément de Rube-Goldberg solutions disséminées sur le Web et spécialement sur SO, mais aucune d’entre elles n’est élégante ni ne résout le problème de en affichant un tableau à une dimension à php
via ajax post. N'oubliez pas de répandre cette solution.