2010-09-08 33 views
12

Estoy tratando de enviar JSON a un archivo PHP usando jQuery AJAX, básicamente lo que estoy tratando de hacer es obtener los valores y las ID de un grupo de elementos secundarios y luego asignarlos a un Objeto JSON y luego enviar ese objeto mediante ajax al archivo PHP que luego lo procesará e ingresará en una base de datos.Enviando JSON vía AJAX a PHP usando jQuery

Aquí está mi código,

Javascript/jQuery:

function test(){ 
    var selects = $('#systems_wrapper').find('.dropDowns'); 
    var newArray = new Array(); 

    selects.each(function(){ 
     var id = $(this).attr('id'); 
     var val = $(this).val(); 
     var o = { 'id': id, 'value': val }; 

     newArray.push(o); 
    }); 

    $.ajax({ 
      type: "POST", 
      url: "qwer.php", 
      dataType: 'json', 
      data: { json: newArray } 
     }); 

} 

PHP:

<?php 
    $json = $_POST['json']; 
    $person = json_decode($json); 

    $file = fopen('test.txt','w+'); 
    fwrite($file, $person); 
    fclose($file); 

    echo 'success?'; 
?> 

Se crea el archivo, pero es completamente en blanco, alguna idea de lo que podría ser ?

¡Gracias por adelantado!

+1

En su '' de depuración con 'print_r ($ _ POST);' para comprobar si está bien JS. Y no necesita 'dataType: 'json'' en su' $ .ajax() ' – Zlatev

+0

Estoy obteniendo una matriz a cambio, Array ( [0] => stdClass Objeto ( [id] => mail_1 [valor] => 150 Liter Cobra (G2) ) [1] => stdClass Object ( [id] => mail_2 [valor] => CPC1518 ) ), estoy luchando para procesarlo, ¿podría acceder a la matriz como así, $ array [0] ['id'] por ejemplo? – Odyss3us

+0

Cuando imprimo_r ($ _ POST) aunque obtengo esto ...Matriz ( [json] => [{"id": "mail_1", "value": "Cobra de 150 litros (G1)"}, {"id": "mail_2", "value": "Cobra de 200 litros (G1) "}] ) – Odyss3us

Respuesta

18

Usted podría tratar de usar el método JSON.stringify() para convertir su matriz en JSON automágicamente. Solo pase la salida de esto.

data: { json: JSON.stringify(newArray) } 

Esperanza esto ayuda

+14

Votos positivos para "automágicamente". – Jish

+0

Me encanta la magia: D +1 – imperium2335

+0

@jish Acabo de hacer. Nueva palabra favorita Beats flub. – copilot0910

1

deberá ajustar un contentType en tu post ajax. Yo usaría contentType: "application/json";

1

Debe usar json_encode() no json_decode()! De esta forma obtendrás la cadena json y podrás escribirla.

1

No hay necesidad de utilizar json_decode Si va a guardar en un archivo de texto. jQuery está codificando su matriz en formato JSON, PHP debería simplemente escribir ese formato directamente en el archivo de texto. Cuando desee abrir ese archivo y acceder a los datos de manera utilizable, lea sus contenidos en una variable y ENTONCES ejecute json_decode() en él.

2

No utilice una matriz.
utilizar una cadena simple como esto:

var o = '['; 
selects.each(function(){ 
    var id = $(this).attr('id'); 
    var val = $(this).val(); 
    o += '{ "id": "'+id+'", "value": "'+val+'" },';  
}); 
o = o.substring(0,o.length-1); 
o += ']'; 

y en el Ajax, envíe la cadena 'o'

 data: { json: newArray } 

en el archivo PHP simplemente hacer una json_decode ($ JSON, true);
devolverá una matriz de matriz a la que puede acceder mediante un foreach
si desea ver la matriz, use var_dump ($ persona);