Tengo 3 diferentes objetos JSON quiero concatenar y enviar más de un archivo PHP con AJAX de jQuery. Puedo recuperar el objeto JSON en el archivo PHP, pero no puede averiguar cómo el bucle a través de los resultados.

He aquí lo que tengo hasta ahora:

    //my 3 JSON objects:

    var json_obj_1{
        "test1_key":"test1_val",
        "test2_key":"test2_val",
        "test3_key":"test3_val"
    }

    var json_obj_2{
        "test4_key":"test4_val"
    }

    var json_obj_3{
        "json_arr":[
              {
                  "test1":"test2",
                  "test3":"test4"
              }
         ]
    }

   //concat these to send over to the PHP file:
   var my_json_obj = json_obj_1.concat(json_obj_2);

   //I found if I didn't stringify obj_3 they didn't concatenate for some reason
   my_json_obj = my_json_obj.concat(JSON.stringify(json_obj_3));


   //my_json_obj  now looks like this:

   {
        "test1_key":"test1_val",
        "test2_key":"test2_val",
        "test3_key":"test3_val"
   }
   {
        test4_key: test4_val
   }
   {
        "json_obj_3":[
            {"test1":"test2","test3":"test4"}
        ]
   }

Basado en esta pregunta: El envío de JSON y PHP mediante ajax, yo no stringify el final de un objeto JSON.

Aquí está la llamada AJAX al archivo PHP:

$.ajax({
        url: 'my_php_file.php',
        data: {my_json_data: my_json_obj},
        type: 'POST',
        async: false,
        dataType: 'json',
        cache:false,
        success:function(data, textStatus, jqXHR){
            console.log('AJAX SUCCESS');
        }, 
        complete : function(data, textStatus, jqXHR){
            console.log('AJAX COMPLETE');
        }
});

Esto es lo que se ve cuando se recuperan en mi archivo PHP:

echo $_POST['my_json_data'];
//outputs:
{
    "test1_key":"test1_val",
    "test2_key":"test2_val",
    "test3_key":"test3_val"
}
{
     test4_key: test4_val
}
{
    "json_obj_3":[
        {"test1":"test2","test3":"test4"}
    ]
}

Aquí es donde tengo que ejecutar en problemas. Quiero ser capaz de bucle a través de este en un foreach. Por lo que he leído (php: el bucle a través de json array) me tienen que decodificar el objeto JSON. Sin embargo cuando hago esto y bucle a través de los resultados que obtengo: «PHP Warning: Invalid argument suministrado para foreach() «.

Incluso si me stringify el objeto JSON antes de enviarlos al archivo PHP me sale el mismo problema. He estado golpeando mi cabeza contra una pared de ladrillo durante horas con este. Cualquier ayuda será enormemente apreciada.

Gracias de antemano.

Resuelto:

Me iba mal cuando la concatenación de mis objetos JSON siguiente a esta pregunta: Combinación de dos json/arrays en javascript en una matriz. En lugar de eso me acabo de poner juntos así:

my_json_obj = '['+json_obj_1+','+json_obj_2+', '+JSON.stringify(json_obj_3)+']';

Uso, a continuación, json_decode en mi archivo PHP que funciona de maravilla. http://json.parser.online.fr/ fue invaluable en la depuración mi cutre JSON. Una gran herramienta para JSON principiantes.

InformationsquelleAutor MP_Webby | 2014-04-26

2 Comentarios

  1. 1

    Como usted dice que es necesario decodificar el JSON, pero su JSON no está bien formado entonces, creo que la función decode falla que hace que el foreach de error. Debe haber una , entre los objetos, hay que faltan comillas alrededor de test4_val y necesita estar dentro de un objeto singular/matriz

    Usted puede comprobar su JSON es sólida en:-

    http://json.parser.online.fr/

    Creo que quiere que se vea más como:-

    [{
    "test1_key":"test1_val",
    "test2_key":"test2_val",
    "test3_key":"test3_val"
    },
    {
     "test4_key": "test4_val"
    },
    {
    "json_obj_3":[
        {"test1":"test2","test3":"test4"}
    ]
    }]
    • Gracias joep1978, para alguien nuevo para trabajar con JSON me apunta a json.parser.online.fr fue una gran idea, resuelve un montón de problemas.
  2. 3

    Debe ser stringifying todo el objeto de tratar el siguiente:

    var my_json_obj = json_obj_1;
    
    $.each(json_obj_2, function(key,value){
        my_json_obj[key]=value;
    });
    $.each(json_obj_3, function(key,value){
        my_json_obj[key]=value;
    });

    Petición Ajax:

    data: {my_json_data: JSON.stringify(my_json_obj)},    

    PHP:

    print_r(json_decode($_POST['my_json_data']));

Dejar respuesta

Please enter your comment!
Please enter your name here