Afișarea unui array JSON returnat
Am următorul 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"}]
Și folosesc acest JavaScript pentru a-l parsa și afișa:
success:function(data){
$.each(data, function(i, post){
content = '';
content += '<li>' + post.post_title + '</li>';
});
$(content).appendTo("#search-results");
}
Dar afișarea arată doar "Undefined", iar Consola nu afișează nicio eroare.
În cazul în care întrebați, aceasta este partea HTML:
<form id="search" action="">
<div class="toolbar">
<h1>Căutare</h1>
<a href="#" class="back">Înapoi</a>
</div>
<ul class="rounded">
<li><input type="text" name="search-text" placeholder="Căutare" id="search-text" /></li>
</ul>
<ul class="edgetoedge" id="search-results">
<li class="sep">Rezultate</li>
</ul>
</form>
Aveți vreo idee de ce? Mulțumesc mult în avans!
Setarea corectă a dataType pentru cerere este un detaliu important care nu a fost luat în considerare în răspunsul de mai sus (acest lucru determină jQuery să trimită un antet HTTP Accept împreună cu cererea - și va aștepta, de asemenea, date JSON în callback-ul de succes):
dataType: 'json',
success:function(json){
var content = '';
jQuery.each(json, function(i, v){
content += '<li>' + v.post_title + '</li>';
});
/* în acest fel rezultatele nu se vor acumula */
jQuery("#search-results").html(content);
}
De asemenea, nu a fost luat în considerare trimiterea antetului HTTP corect cu răspunsul:
header("content-type: application/json; charset=utf8");
Internet Exploder nu prea apreciază acest antet - dar asta e altă poveste (citește mai mult).

$.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){
// acest cod se execută când primim răspunsul JSON
//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('Eroare');
console.log(errorThrown);
}
});

@syslogic, mulțumesc pentru timpul acordat. Am inserat mai sus întregul fragment de Ajax pe care l-am folosit până acum. Deși probabil ai dreptate în legătură cu "parseJSON" fiind inutil, am primit erori de null când l-am omis. Încă analizez problema.

- Adaugă
var json = jQuery.parseJSON(data);
- Definește
content
adăugândvar content
- Plasează
content = '';
înainte de bucla each
Astfel:
function (data) {
var content = '';
var json = jQuery.parseJSON(data);
$.each(json, function(i, post) {
content += '<li>' + post.post_title + '</li>';
});
$(content).appendTo("#search-results");
}

Ai înțeles corect, doar că serverul meu FTP era în jos. Îmi pare rău și mulțumesc!!!

Păi... jQuery.parseJSON(data) este destul de inutil - deoarece variabila "data" ar trebui deja să fie un obiect JS în callback-ul funcției jQuery.ajax... acest lucru s-ar aplica doar dacă este un șir JSON. Mai degrabă presupun că trimiteți JSON fără sau cu antete HTTP greșite.

Îmi pare rău, a trebuit să votez negativ pentru că răspunsul a fost ușor înșelător, parțial incorect. Cred că funcționează așa - dar modul în care funcționează nu este cum ar trebui să fie (trimiterea JSON ca text/plain și apoi parsarea din nou nu are sens, este o pierdere de energie).
