dans mon application, j'ai besoin d'envoyer un objet javascript Array à un script php via ajax post. Quelque chose comme ça:
var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
alert(saveData);
$.ajax({
type: "POST",
url: "salvaPreventivo.php",
data:saveData,
async:true
});
Les index de Array sont des chaînes et non des entiers. C'est pourquoi, quelque chose comme saveData.join ('&') ne fonctionne pas.
Des idées?
Merci d'avance
N'en faites pas un tableau si ce n'est pas un tableau, faites-en un objet:
var saveData = {};
saveData.a = 2;
saveData.c = 1;
// equivalent to...
var saveData = {a: 2, c: 1}
// equivalent to....
var saveData = {};
saveData['a'] = 2;
saveData['c'] = 1;
Le faire comme vous le faites avec Arrays ne fait que tirer parti du traitement de Arrays par Javascript et non de la bonne façon de le faire.
Si le tableau est déjà défini, vous pouvez créer un objet JSON en parcourant les éléments du tableau que vous pouvez ensuite publier sur le serveur. Si vous créez le tableau comme pour le cas ci-dessus, créez simplement un objet Json proposé par Paolo Bergantino
var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
//creating a json object
var jObject={};
for(i in saveData)
{
jObject[i] = saveData[i];
}
//Stringify this object and send it to the server
jObject= YAHOO.lang.JSON.stringify(jObject);
$.ajax({
type:'post',
cache:false,
url:"salvaPreventivo.php",
data:{jObject: jObject}
});
// reading the data at the server
<?php
$data = json_decode($_POST['jObject'], true);
print_r($data);
?>
//for jObject= YAHOO.lang.JSON.stringify(jObject); to work,
//include the follwing files
//<!-- Dependencies -->
//<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>
//<!-- Source file -->
//<script src="http://yui.yahooapis.com/2.9.0/build/json/json-min.js"></script>
J'espère que cela t'aides
Vous pouvez parcourir les paires clé/valeur de l'objet saveData pour construire un tableau des paires, puis utiliser join ("&") sur le tableau résultant:
var a = [];
for (key in saveData) {
a.Push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
Il existe réellement une différence entre un objet tableau et un objet JSON. Au lieu de créer un objet tableau et de le convertir en objet json (avec JSON.stringify (arr)), vous pouvez procéder comme suit:
var sels = //Here is your array of SELECTs
var json = { };
for(var i = 0, l = sels.length; i < l; i++) {
json[sels[i].id] = sels[i].value;
}
Il n'est pas nécessaire de le convertir en JSON, car il s'agit déjà d'un objet JSON. Pour voir la même utilisation json.toSource();
Lorsque vous utilisez les données sur le serveur, vos caractères peuvent atteindre avec l’ajout de barres obliques, par exemple Si string = {"hello"} Vient comme string = {\ "hello \"} Pour résoudre le problème suivant fonction peut être utilisé plus tard pour utiliser json decode.
<?php
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$array = $_POST['jObject'];
$array = stripslashes_deep($array);
$data = json_decode($array, true);
print_r($data);
?>