jQuery loop sul risultato JSON di AJAX Success?

Sulla callback di successo di jQuery AJAX voglio eseguire il loop dei risultati dell’object. Questo è un esempio di come appare la risposta in Firebug.

[ {"TEST1":45,"TEST2":23,"TEST3":"DATA1"}, {"TEST1":46,"TEST2":24,"TEST3":"DATA2"}, {"TEST1":47,"TEST2":25,"TEST3":"DATA3"} ] 

Come posso eseguire il loop dei risultati in modo che possa accedere a ciascuno degli elementi? Ho provato qualcosa di simile in basso ma questo non sembra funzionare.

 jQuery.each(data, function(index, itemData) { // itemData.TEST1 // itemData.TEST2 // itemData.TEST3 }); 

puoi rimuovere il loop esterno e sostituirlo con data.data :

 $.each(data.data, function(k, v) { /// do stuff }); 

Eri vicino:

 $.each(data, function() { $.each(this, function(k, v) { /// do stuff }); }); 

Hai una matrice di oggetti / mappe, quindi il ciclo esterno scorre su quelli. Il ciclo interno scorre le proprietà su ciascun elemento dell’object.

Puoi anche usare la funzione getJSON :

  $.getJSON('/your/script.php', function(data) { $.each(data, function(index) { alert(data[index].TEST1); alert(data[index].TEST2); }); }); 

Questa è solo una riformulazione della risposta di ifesdjeen, ma ho pensato che potesse essere d’aiuto alle persone.

Se usi Fire Fox, apri una console (usa il tasto F12) e prova questo:

 var a = [ {"TEST1":45,"TEST2":23,"TEST3":"DATA1"}, {"TEST1":46,"TEST2":24,"TEST3":"DATA2"}, {"TEST1":47,"TEST2":25,"TEST3":"DATA3"} ]; $.each (a, function (bb) { console.log (bb); console.log (a[bb]); console.log (a[bb].TEST1); }); 

spero che sia d’aiuto

Per chiunque altro è bloccato, probabilmente non funziona perché la chiamata ajax sta interpretando i dati restituiti come testo, cioè non è ancora un object JSON.

Puoi convertirlo in un object JSON manualmente usando il comando parseJSON o semplicemente aggiungendo la proprietà dataType: ‘json’ alla tua chiamata ajax. per esempio

 jQuery.ajax({ type: 'POST', url: '< ?php echo admin_url('admin-ajax.php'); ?>', data: data, dataType: 'json', // ** ensure you add this line ** success: function(data) { jQuery.each(data, function(index, item) { //now you can access properties using dot notation }); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("some error"); } }); 

Accedi all’array json come faresti con qualsiasi altro array.

 for(var i =0;i < itemData.length-1;i++) { var item = itemData[i]; alert(item.Test1 + item.Test2 + item.Test3); } 

Puoi anche usare la funzione getJSON:

 $.getJSON('/your/script.php', function(data) { $.each(data, function(index) { alert(data[index].TEST1); alert(data[index].TEST2); }); }); 

Prova la funzione jQuery.map , funziona molto bene con le mappe.

 var mapArray = { "lastName": "Last Name cannot be null!", "email": "Email cannot be null!", "firstName": "First Name cannot be null!" }; $.map(mapArray, function(val, key) { alert("Value is :" + val); alert("key is :" + key); }); 
  

Questo è quello che mi è venuto in mente per visualizzare facilmente tutti i valori dei dati:

 var dataItems = ""; $.each(data, function (index, itemData) { dataItems += index + ": " + itemData + "\n"; }); console.log(dataItems); 

$each funzionerà .. Un’altra opzione è jQuery Ajax Callback per il risultato dell’array

 function displayResultForLog(result) { if (result.hasOwnProperty("d")) { result = result.d } if (result !== undefined && result != null ) { if (result.hasOwnProperty('length')) { if (result.length >= 1) { for (i = 0; i < result.length; i++) { var sentDate = result[i]; } } else { $(requiredTable).append('Length is 0'); } } else { $(requiredTable).append('Length is not available.'); } } else { $(requiredTable).append('Result is null.'); } } 

se non vuoi avvisarti, vuoi uhml, allora fallo

 ... $.each(data, function(index) { $("#pr_result").append(data[index].dbcolumn); }); ... 

NOTA: usa “append” non “html” altrimenti l’ultimo risultato è ciò che vedrai nella tua vista html

allora il tuo codice html dovrebbe assomigliare a questo

 ... 
...

Puoi anche dare uno stile (aggiungi class) al div nella jquery prima che venga visualizzato come html