Stampare un array JSON restituito
Ho il seguente array JSON:
[{"occurences":"1","post_title":"Test 1","ID":"16"},
{"occurences":"1","post_title":"Test 2","ID":"19"},
{"occurences":"1","post_title":"\u543b\u60a8\u7684\u5c41\u80a1","ID":"21"}]
E uso questo js per analizzarlo e stamparlo:
success:function(data){
$.each(data, function(i, post){
content = '';
content += '<li>' + post.post_title + '</li>';
});
$(content).appendTo("#search-results");
}
Ma il display mostra solo "Undefined" e la Console non mostra errori.
Nel caso ve lo stiate chiedendo, questa è la parte HTML:
<form id="search" action="">
<div class="toolbar">
<h1>Ricerca</h1>
<a href="#" class="back">Indietro</a>
</div>
<ul class="rounded">
<li><input type="text" name="search-text" placeholder="Cerca" id="search-text" /></li>
</ul>
<ul class="edgetoedge" id="search-results">
<li class="sep">Risultati</li>
</ul>
</form>
Qualche idea del perché? Grazie mille in anticipo!
Impostare il corretto dataType per la richiesta è un dettaglio importante non considerato nella risposta precedente (questo fa sì che jQuery invii un header HTTP Accept con la richiesta - e si aspetterà anche dati JSON nella callback di successo):
dataType: 'json',
success:function(json){
var content = '';
jQuery.each(json, function(i, v){
content += '<li>' + v.post_title + '</li>';
});
/* in questo modo i risultati non si accumuleranno */
jQuery("#search-results").html(content);
}
Anche l'invio del corretto header HTTP con la risposta non era stato considerato:
header("content-type: application/json; charset=utf8");
Internet Explorer non gradisce questo header - ma questa è un'altra storia (leggi di più).

$.ajax({
url: 'http://mypath/wp-admin/admin-ajax.php',
data:{
'action':'go_ajax',
'fn':'spw_autosuggest',
'queryString': $.trim(inputString.val())
},
dataType: 'JSON',
success:function(data){
// questa parte gestisce i dati JSON ricevuti
//console.log(data);
var content = '';
var data = $.parseJSON(data);
$.each(data, function(i, post) {
content += '<li>' + post.post_title + '</li>';
});
$(content).appendTo("#search-results");
},
error: function(errorThrown){
alert('errore');
console.log(errorThrown);
}
});

@syslogic, grazie per aver dedicato del tempo. Incollo sopra l'intero snippet di Ajax che ho utilizzato finora. Mentre probabilmente hai ragione sul fatto che "parseJSON" sia inutile, ricevevo errori null quando veniva omesso. Sto ancora riflettendo sul problema.

- Aggiungi
var json = jQuery.parseJSON(data);
- Definisci
content
aggiungendovar content
- Posiziona
content = '';
prima del ciclo each
In questo modo:
function (data) {
var content = '';
var json = jQuery.parseJSON(data);
$.each(json, function(i, post) {
content += '<li>' + post.post_title + '</li>';
});
$(content).appendTo("#search-results");
}

Avevi ragione, tranne per il fatto che il mio server FTP era offline. Scusa e grazie!!!

Ehm... jQuery.parseJSON(data) è piuttosto inutile - perché la variabile "data" dovrebbe già essere un oggetto JS nella callback della funzione jQuery.ajax... questo si applicherebbe solo se fosse una stringa JSON. Piuttosto presumo che tu stia inviando il JSON senza header HTTP o con quelli sbagliati.

Scusa, ho dovuto votare negativamente perché la risposta era leggermente fuorviante, in parte errata. Immagino che funzioni così - ma il modo in cui funziona non è come dovrebbe essere (inviare JSON come text/plain e poi parsarlo di nuovo non ha senso, è uno spreco di energia).
