web-dev-qa-db-fra.com

Conversion de js Array () en objet JSon à utiliser avec .Jax JQuery

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

27
Alekc

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.

62
Paolo Bergantino

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

7
Shadrack B. Orina

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
4
dstnbrkr

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();

1
Tarun Gupta

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);
?>
0
Ismael Tarqui