2009-04-03 9 views
27

en mi aplicación, necesito enviar un objeto Array de javascript al script php mediante la publicación ajax. Algo como esto: índicesConvierta js Array() en el objeto JSon para utilizar con JQuery .ajax

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

de matriz son cadenas y no int, por lo que por esta razón algo así como saveData.join ('&') no funciona.

Ideas?

Gracias de antemano

Respuesta

61

no lo convierten en una matriz si no es un conjunto, lo convierten en un objeto:

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; 

Hacerlo de la manera que lo están haciendo con matrices es simplemente tomar ventaja del tratamiento de Arrays de Javascript y no es la forma correcta de hacerlo.

+1

Gracias, funciona de esta manera;) – Alekc

4

Puede repetir los pares clave/valor del objeto SaveData para construir una matriz de los pares, a continuación, utilizar join ("&") en la matriz resultante:

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

$ .ajax() codificará un objeto js (mapa) de forma predeterminada. ¡mira la opción processData! – zack

7

Si la matriz ya está definido , puede crear un objeto json al recorrer los elementos de la matriz que luego puede publicar en el servidor, pero si está creando la matriz como en el caso anterior, simplemente cree un objeto json en su lugar como sugerido por 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> 

Espero t su ayuda

0

Al utilizar los datos en el servidor, los personajes pueden alcanzar con la adición de barras por ejemplo si la cadena = { "hola"} viene como cadena = {\ "hola \"} para resolver el siguiente la función se puede usar más tarde para usar la decodificación json.

<?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); 
?> 
1

Existe realmente una diferencia entre objeto de matriz y objeto JSON. En lugar de crear objeto de matriz y convertirlo en un objeto JSON (con JSON.stringify (arr)) se puede hacer esto:

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

No hay necesidad de convertirlo en JSON porque su ya un objeto JSON. Para ver el mismo uso json.toSource();

Cuestiones relacionadas