2012-03-30 13 views
6

Ok che lotta seriamente qui. Sto riscontrando qualche problema nel tentativo di inviare una matrice multidimensionale a PHP tramite ajax. Ecco quello che ho cercato:Matrici multidimensionali via ajax a PHP

Per semplificare piuttosto che copiare incollare un muro di codice:

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

Voglio ottenere questo a PHP tramite post. Ho pensato che forse partecipavano semplicemente unirsi a loro insieme come sono multidimensionale comunque così:

main_array['peoplearray'] = peoplearray; 

ora a fare l'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); 
}) 

in PHP sto solo facendo quanto segue in questo momento:

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

in firebug: (an empty string)

quando ho la var data = JSON.stringify(main_array); non commentata ottengo il seguente: [][

se aggiungo $data = json_decode($_POST['data']); al php ottengo:

Array () 

Fondamentalmente il main_array mi rendo conto che non c'è bisogno di essere un array e così posso ottenere quella roba attraverso nessun problema ma quello che devo fare è ottenere il peoplearray in modo che io possa fare un po 'di foreach ecc ... con esso in php. Qualsiasi aiuto sarebbe molto apprezzato, sono sicuro che sono solo stupido!

EDIT: Il ragionamento dietro questo è che peoplearray potrebbe avere 0 o 100 voci in modo ho solo bisogno di farlo a PHP così posso foreach che faccia gli ingressi DB. Se c'è un approccio migliore, sarei molto grato di sentirlo, dato che sono ancora piuttosto nuovo in questo.

EDIT: Grazie alla risposta di Nicola tutto sta passando bene tranne la parte importante che è mainarry.peoplearray - non appare nel ritorno console.log e non posso accedervi in ​​PHP. Qualche soluzione su questo o devo inserire l'intelligenza foreach in javascript e inviare semplicemente tutto individualmente?

+1

puoi pubblicare l'intera funzione JS che effettua la richiesta ajax? se usi console.log (main_array) (prima di chiamare $ .ajax) cosa mostra in firebug? –

+0

Sto ottenendo il risultato corretto con console.log (main_array) quando lo faccio prima di JSON.stringify. Dopo JSON.stringify ottengo: []. Per quanto riguarda l'Ajax, questo è tutto ciò che sto facendo attualmente. In effetti è l'unica copia e incolla vera! Giusto per arrivare a questo punto mi ci sono voluti per sempre il debug degli array in Chrome è un no no che ho appena scoperto. – Zac

risposta

1

ho preso a lavorare mantenendo il peoplearray separata.

Così ho fatto come Nicola ha detto e creato mainarray come un oggetto vale a dire. dichiarando con graffe: {}

La peoplearray ho lasciato come un array cioè dichiara con [], però poi name,age&sex campi sono creati come un esempio oggetto. {} e poi .push() nello peoplearray.

Poi l'Ajax sembrava come segue:

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

poi con il tutto PHP è disponibile in $ _POST, e se si

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

gli oggetti IE name,age,sex proprietà sono mostrati nella

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

Questo dovrebbe aver funzionato anche tenendoli insieme, ma è una buona soluzione –

+0

Sì, per qualche motivo sia il post che il ritorno si mostravano nulli quando avevo un array all'interno dell'oggetto o un array all'interno di un array ed è per questo che ho dovuto dividili e assicurati che ogni 'persona' fosse un oggetto all'interno del 'peoplearray'. Molte grazie per il tuo aiuto Nicola. – Zac

7

Prima di tutto main_array non è un array, ma un oggetto perché in JavaScript non ci sono array associativi e per questo motivo

main_array['peoplearray'] = peoplearray; 

è equivalente a

main_array.peoplearray = peoplearray; 

e si dovrebbe dichiarare main_array come questo

var main_array = {}; 

quindi provare a cambiare la tua funzione n questo modo:

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

e lato server

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

Innanzitutto, grazie per la risposta. Mi rendo conto di avere una comprensione fondamentale mancante dell'oggetto/array che ho bisogno di compilare. Funziona alla grande ma perdo il peoplearray nell'oggetto restituito nonostante lo mostri prima. Inoltre, come posso accedere a ciascuna proprietà dal lato php? – Zac