2012-03-30 21 views
6

Ok, estoy teniendo problemas aquí. Estoy teniendo problemas al intentar enviar una matriz multidimensional a PHP a través de ajax. Esto es lo que he estado intentando:Arrays multidimensionales vía ajax a PHP

Para simplificar en lugar de copiar y pegar una pared de código:

peoplearray[0] = [name] => 'john' 
         [age] => '28' 
         [sex] => 'Male' 
    peoplearray[1] = [name] => 'julie' 
         [age] => '20' 
         [sex] => 'Female' 

    main_array['item'] = 'x'; 
    main_array['something'] = 'x'; 
    main_array['another'] = 'x'; 

Quiero conseguir que esto PHP a través de post. Pensé que pueda Aswell simplemente unirlos como soy multidimensional de todas formas por lo tanto:

main_array['peoplearray'] = peoplearray; 

ahora para hacer el Ajax:

// var data = JSON.stringify(main_array); 

var send = $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} //I do change this `main_array` when using the above stringify! 
}); 


send.done(function(msg) { 
console.log(msg); 
}) 

en PHP sólo estoy haciendo lo siguiente en este momento:

$data= $_POST['data']; 
print_r($data); 

en Firebug: (an empty string)

cuando tengo la var data = JSON.stringify(main_array); sin comentar consigo el siguiente: [][

si añado $data = json_decode($_POST['data']); a la php me sale:

Array () 

Básicamente, el main_array realizo no tiene que ser una matriz y para que pueda obtener esas cosas a través de ningún problema pero lo que tengo que hacer es obtener el peoplearray para poder hacer un poco de foreach etc ... con él en php. Cualquier ayuda sería muy apreciada. ¡Estoy seguro de que solo estoy siendo estúpido!

EDITAR: El razonamiento detrás de esto es que peoplearray podría tener 0 o 100 entradas, así que solo necesito obtenerlo para php, así que puedo foreach hacer las entradas de DB. Si hay un mejor enfoque, estaría muy agradecido de escucharlo, ya que todavía soy bastante nuevo en esto.

EDITAR: Gracias a la respuesta de Nicola todo está pasando bien, excepto la parte importante que es mainarry.peoplearray - no aparece en la declaración console.log y no puedo acceder a ella en PHP. ¿Alguna solución sobre esto o tengo que poner la inteligencia foreach en el javascript y simplemente enviar todo de forma individual?

+1

puede publicar toda la función de JS que hace la solicitud de AJAX? si usas console.log (main_array) (antes de llamar a $ .ajax) ¿qué muestra en firebug? –

+0

Obtengo el resultado correcto con console.log (main_array) cuando lo hago antes de JSON.stringify. Después de JSON.stringify obtengo: []. En cuanto al ajax, eso es todo lo que estoy haciendo actualmente. De hecho, ¡es la única copia y pega verdadero! Solo para llegar a este punto me ha llevado siempre depurar matrices en Chrome. No, no, acabo de enterarme. – Zac

Respuesta

1

lo tengo para trabajar manteniendo el peoplearray separada.

Así que hice lo que dijo Nicola y creó mainarray como un objeto, es decir. declarando con curlies: {}

El peoplearray Salí como una matriz es decir, declarar con [], sin embargo luego name,age&sex campos I creados como un IE objeto. {} y luego .push() en el peoplearray.

A continuación, el Ajax se veía como sigue:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array, people:peoplearray} 
}); 

luego con el todo PHP está disponible en el $ _POST, y si

echo json_encode($people); //or whatever var name it is stored as in the php 

los objetos es decir name,age,sex propiedades se muestran en la

send.done(function(msg) { 
console.log(msg); 
}) 
+0

Esto debería haber funcionado también manteniéndolos juntos, pero es una buena solución –

+0

Sí, por alguna razón tanto la publicación como el retorno se mostraban nulas cuando tenía una matriz dentro del objeto o una matriz dentro de una matriz por lo que tuve que divídalos y asegúrese de que cada "persona" sea un objeto dentro de "peoplearray". Muchas gracias por su ayuda Nicola. – Zac

7

En primer lugar main_array no es una matriz, pero un objeto porque en javascript no hay matrices asociativas y por esta razón

main_array['peoplearray'] = peoplearray; 

es equivalente a

main_array.peoplearray = peoplearray; 

y se debe declarar main_array como esto

var main_array = {}; 

intente cambiar su functio n como esto:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} 
}); 

y el servidor lado

header('Content-type: application/json'); 
$data= $_POST['data']; 
echo json_encode($data); 
+0

En primer lugar, gracias por la respuesta. Me doy cuenta de que tengo una comprensión fundamental faltante del objeto/matriz que necesito completar. Esto funciona muy bien, pero pierdo el conjunto de caracteres en el objeto devuelto a pesar de que se muestra antes. Además, ¿cómo puedo acceder a cada propiedad en el lado php? – Zac