2012-01-25 16 views
5

Mi sembra di avere problemi con il recupero dei dati da un array php, ho esaminato vari esempi di come farlo ma mi manca qualcosa perché non riesco a far funzionare il mio codice .Lettura da un array PHP in JQuery

metodo PHP

function getLatestActivity(){ 
    $messages = array( 
     array('id'=>'01', 'value'=>'blah'), 
     array('id'=>'02', 'value'=>'Oil'), 
     array('id'=>'03', 'value'=>'Spark') 
    ); 

    echo json_encode($messages); 
    return; 
} 

AJAX ottenere functiom

function getLatestActivities(){ 
    $.ajax({ 
     type: "GET", url: "include/process.php", 
     data:{ 
     getLatestActivity: "true", 
     toUser: "4", 
     ignoreMessages:"1", 
     dataType: "json" 
     }, 
     success: function(data){ 
     $.each(data, function (i, elem) { 
      alert(data.id); 
     });    
     } 
    }); 
} 

Le stampe di avviso il messaggio "indefinito", tutto l'aiuto sarebbe apprezzato grazie.

risposta

6

Prova con - è il tuo singolo oggetto ora:

alert(elem.id); 
+0

strano ma ancora non ha funzionato. –

+0

Controlla, cosa c'è in 'data' prima di' $ .each() '. – hsz

+0

se scrivo "alert (dati);" invece di $ .each() ottengo [{"id": "01", "valore": "blah"}, {"id": "02", "valore": "Olio"}, { "id": "03", "valore": "Spark"}] –

0

penso dataType non dovrebbe essere una parte dei dati oggetto piuttosto dovrebbe essere di pari livello di successo (opzioni). Credo che tu non stia ottenendo dati come oggetto JSON piuttosto semplicemente stringa a causa di esso

2

È molto probabile che i dati non siano quello che ti aspetti. Non stai impostando alcuna intestazione nella tua risposta, e come suggerito da @Sudesh dataType non è nel posto giusto. Il risultato è che i dati sono molto probabilmente una stringa perché jquery non la analizzerà come json.

Ti stai anche riferendo alla variabile sbagliata. data.id non può esistere con i dati che stai restituendo da php. avresti bisogno di elem.id o se preferisci data[i].id se i dati contengono ciò che ti aspetti. A parte - l'uso di $ .each anziché di un ciclo for è relativamente inefficiente.

È possibile verificare se questo è il caso con il codice come:

function getLatestActivities(){ 
    $.ajax({ 
     type: "GET", url: "include/process.php", 
     data:{ 
     getLatestActivity: "true", 
     toUser: "4", 
     ignoreMessages:"1", 
     dataType: "json" 
     }, 
     success: function(data){ 
     console.log(data); // <- look at the response 
     $.each(data, function (i, elem) { 
      // alert(data.id); don't debug using alerts 
      console.log(elem); 
     });    
     } 
    }); 
} 

Se i dati è una stringa (o semplicemente, non quello che ci si aspetta) questo dovrebbe arrivare più vicino:

function getLatestActivity(){ 
    .... 
    header('Content-type: application/json'); 
    echo json_encode($messages); 
} 

con

function getLatestActivities(){ 
    $.ajax({ 
     url: "include/process.php", 
     data:{ 
     getLatestActivity: true, 
     toUser: 4, 
     ignoreMessages:1, 
     }, 
     success: function(data){ 
     console.log(data);   
     ...    
     } 
    }); 
} 

data dovrebbe almeno allora essere un array.