2011-08-31 36 views
12

Mi scuso se questa spiegazione non è chiara, è difficile per me capire anche io. Come posso utilizzare PHP & Ajax per inviare un array a Javascript? Sto usando Ajax per ottenere una serie di foto, che sto cercando di aggiungere a un numero vuoto <div> sulla mia pagina.Come passare un array usando PHP e Ajax in Javascript?

Il jQuery si presenta come segue:

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    success: function(data) { 
     alert(data); 
    } 

E i getPhotos funzione PHP aspetto:

<?php 

$photos = array(); 

foreach ($data as $photo) { 
    array_push($photos,$photo['source']); 
    } 

// echo json_encode($photos); How should I be returning $photos? 

Se ho semplicemente echo $photos; i dati vengono inviati al callback successo, ma doesn' t sembra essere in un formato utilizzabile.

Se faccio un var_dump($photos) in PHP, il risultato appare qualcosa di simile:

array(4) { 
    [0]=> 
    string(14) "some_image.jpg" 
    [1]=> 
    string(14) "some_image.jpg" 
    [2]=> 
    string(14) "some_image.jpg" 
    [3]=> 
    string(14) "some_image.jpg" 
} 

che ho provato varie combinazioni di json_encode e simili, ma in realtà io sto indovinando e non sono sicuro della teoria dietro di esso. In questo contesto qual è il modo migliore per passare i dati da PHP a Javascript?

risposta

19

Prova:

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    dataType:"json", 
    success: function(data) { 
     alert(data[0]); 
    } 

Sul lato PHP, ti verrà voglia di stampa:

print json_encode($photos); 

Un'altra cosa che si potrebbe provare in modo da incapsulare meglio il codice, e come esempio di ulteriore good JSON, sarebbe:

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!")); 

Poi sul server, che ci si accede con questi:

data.photolist[0]; //First photo 
data.photo_owner; //The owner of the photo set 
+0

Perfetto, grazie. Vorresti approfondire il vantaggio di incapsulare meglio il codice? –

+1

Certo, @Joe. Se vuoi solo restituire una lista di foto, quello che hai va bene. Ma, se in seguito decidi di voler restituire più informazioni su ogni foto, allora l'array associativo è utile perché porta ad un buon modo per accedere ai dati in JS. Un altro modo per farlo potrebbe essere quello di rendere ogni foto un array associativo e restituire una matrice di array associativi, ala: 'array (array (" name "=>" Photo1 "," file "=>" img1.jpg "), array ("name" => "Weekend at the Beach", "file" => "imgs/beachphoto.jpg")) '. – Richard

+0

@Joe: Il vantaggio di fare quanto sopra è relativo a ciò che stai cercando di ottenere con il tuo codice. Se ti ritrovi a fare cose contorte dopo per recuperare i tuoi dati, ricorda che abbiamo avuto questa conversazione, e forse questo ti aiuterà :-) Questo ha chiarito le cose? – Richard

2

json_encode è sicuramente la strada da percorrere. jQuery ha persino il supporto integrato per l'analisi di JSON. Potresti usare per es.

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    dataType: 'json', // will automatically convert array to JavaScript 
    success: function(array) { 
     alert(array[0]); // alerts first string 
    } 
}); 
0

ritorno JSON stesso e poi costruire la matrice in js dal loop sul JSON come segue:

var array=[]; 
for(var key in json) 
{  
    if(json.hasOwnProperty(key)) 
     array.push(json[key]); 
} 

Oppure si può semplicemente lavorare con la stessa JSON alcuna ragione per aver bisogno della matrice?

qualcosa come JSON [0] o JSON [1] ecc

0

json_encode rulez quando avete bisogno di questa roba.

Recentemente ho imparato questa cosa troppo cool! Ecco come si fa:

function jsonResponse($array) { 
    header('Content-type: application/json; charset=utf-8;'); 
    die(json_encode($array)); 
} 

Questo è opzionale, se si vuole farlo, non c'è bisogno di, ma nel mio sistema MVC, tendo a scrivere in questo modo ... Quindi, prima faccio una richiesta ajax (prototipo), a uno script, che in seguito chiama questa funzione jsonResponse che ho menzionato prima ...

Questo è il codice jscript, si noti il ​​res.msg, questo è dove possiamo operare con array. Ma, essere sicuri di inviare la risposta in formato JSON in PHP, utilizzando la funzione jsonResponse, è facile da usare, per esempio, la funzione PHP può essere simile a questa:

function ajax_get_user() { 
    $userName = 'Adrian'; 
    $active = 1; 
    jsonResponse(array('username' => $username, 'active' = $active)); 
} 

Più tardi si può ottenere facile, res .nomeutente, res.active.

Penso che questo dovrebbe farlo!

8

Ho creato un array $result in PHP e alla fine della richiesta.

echo json_encode($result); 

in funzione JS $.post gestore:

var obj = $.parseJSON(data); 
var v = data.k; 

dove k è il valore chiave in array associativo.

+0

Non ci sono array associativi in ​​Javascript, solo oggetti. – Marcelo

+0

Si potrebbe anche voler controllare se il valore che si sta ricevendo nella chiamata AJAX non è NULL –

+0

Marelo, intendevo la chiave dell'array associativo, creato nel file PHP :) – bboydev

Problemi correlati