it-swarm.com.de

Konvertieren Sie js Array () in ein JSon-Objekt zur Verwendung mit JQuery .ajax

in meiner App muss ich ein Javascript-Array-Objekt per Ajax-Post an PHP-Skript senden. Etwas wie das:

var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
alert(saveData);
$.ajax({
    type: "POST",
    url: "salvaPreventivo.php",
    data:saveData,
    async:true
    });

Die Indizes des Arrays sind Strings und nicht int, daher funktioniert etwas wie saveData.join ('&') nicht.

Ideen?

Danke im Voraus

27
Alekc

Machen Sie es nicht zu einem Array, wenn es kein Array ist, sondern zu einem Objekt:

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;

Wenn Sie es so machen, wie Sie es mit Arrays tun, nutzen Sie einfach die Javascript-Behandlung von Arrays und nicht die richtige Vorgehensweise.

62

Wenn das Array bereits definiert ist, können Sie ein Json-Objekt erstellen, indem Sie die Elemente des Arrays durchlaufen, die Sie dann an den Server senden können. Wenn Sie jedoch das Array wie im obigen Fall erstellen, erstellen Sie einfach ein Json-Objekt als vorgeschlagen von 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>

Hoffe das hilft

7

Sie können die Schlüssel/Wert-Paare des saveData-Objekts iterieren, um ein Array der Paare zu erstellen, und dann im resultierenden Array join ("&") verwenden: 

var a = [];
for (key in saveData) {
    a.Push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
4
dstnbrkr

Es gibt tatsächlich einen Unterschied zwischen Arrayobjekt und JSON-Objekt. Anstatt Array-Objekte zu erstellen und in ein Json-Objekt zu konvertieren (mit JSON.stringify (arr)), können Sie Folgendes tun:

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;
}

Es ist nicht notwendig, es in JSON zu konvertieren, da es bereits ein Json-Objekt ist. Um das gleiche anzuzeigen, verwenden Sie json.toSource();

1
Tarun Gupta

Wenn Sie die Daten auf dem Server verwenden, können Ihre Zeichen durch das Hinzufügen von Schrägstrichen erreicht werden, z Funktion kann später verwendet werden, um Json Decode zu verwenden.

<?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