我是JSON的新手。 我有一个带有多维数组的php,它最终以JSON格式编码:
<?php
header('Content-Type: application/json');
$lista = array (
'Conoscenti'=>array (
0=>array(
"Nome"=>"John",
"Cognome"=>"Doe",
"Nato"=>array(
"Giorno"=>16,
"Mese"=>"Febbraio",
"Anno"=>1972
)
),
1=>array(
"Nome"=>"Elvis",
"Cognome"=>"Presley",
"Nato"=>array(
"Giorno"=>12,
"Mese"=>"Luglio",
"Anno"=>1984
)
),
2=>array(
"Nome"=>"Mick",
"Cognome"=>"Jagger",
"Nato"=>array(
"Giorno"=>13,
"Mese"=>"Novembre",
"Anno"=>1984
)
)
),
"Amici"=>array(
0=>array(
"Nome"=>"Michael",
"Cognome"=>"Myers",
"Nato"=>array(
"Giorno"=>8,
"Mese"=>"Dicembre",
"Anno"=>1986
)
),
1=>array(
"Nome"=>"Jim",
"Cognome"=>"Fear",
"Nato"=>array(
"Giorno"=>4,
"Mese"=>"Febbraio",
"Anno"=>1985
)
)
)
);
echo json_encode($lista);
?>
我想通过Ajax加载它:为此,我编写了一些JQuery代码:
var output ="<ul>";
$.ajax({
url:"lista.php",
dataType:"json"
}).done(function(data) {
$.each(data.Conoscenti, function() {
output +="<li>"+this.Nome+" "+this.Cognome+" è un mio conoscente. È nato il "+this.Nato.Giorno+" "+this.Nato.Mese+" "+this.Nato.Anno+"</li>";
});
});
output += "</ul>";
$("body").html(output);
但是html页面显示为空白,甚至没有错误。分析源代码,它只显示ul标记,因为它不在ajax调用之外。任何人都知道如何解决它?谢谢。
答案 0 :(得分:1)
问题是因为承诺在请求完成后执行。这意味着在循环返回的JSON之前已经运行$('body').html(output)
。
要解决此问题,您需要执行所有依赖于done()
处理程序内响应的代码。试试这个:
$.ajax({
url:"lista.php",
dataType:"json"
}).done(function(data) {
var output = "<ul>";
$.each(data.Conoscenti, function() {
output += "<li>" + this.Nome + " " + this.Cognome + " è un mio conoscente. È nato il " + this.Nato.Giorno + " " + this.Nato.Mese + " " + this.Nato.Anno + "</li>";
});
output += "</ul>";
$("body").html(output);
});
答案 1 :(得分:0)
$.ajax({
url:"lista.php",
dataType:"json"
})
.done(function(data) {
var output ="<ul>";
$.each( data.Conoscenti, function() {
output +="<li>"+ this.Nome+" "+this.Cognome+" è un mio conoscente. È nato il "+ this.Nato.Giorno+" "+ this.Nato.Mese+" "+ this.Nato.Anno+"</li>";
});
output += "</ul>";
$("body").html(output);
});
答案 2 :(得分:0)
出现问题是因为变量&#34; out&#34;在执行ajax请求之前发生。 你必须在变量中打印变量&#34;完成&#34;。
那么,一个好主意就是永远有一个分支&#34;完成&#34;和分支&#34;失败&#34; (也可能是分支&#34;总是&#34;)以便管理请求的成功或失败。
试试这个:
$.ajax({
url:"lista.php",
dataType:"json"
})
.done(function(data) {
var output = "<ul>";
$.each(data.Conoscenti, function() {
output += "<li>" + this.Nome + " " + this.Cognome + " è un mio conoscente. È nato il " + this.Nato.Giorno + " " + this.Nato.Mese + " " + this.Nato.Anno + "</li>";
});
output += "</ul>";
$("body").html(output);
})
.fail(function( jqXHR, textStatus, errorThrown ){
/*manage your error*/
})
.always(function()){
console.log("completed");
}
答案 3 :(得分:0)
Daniele,问题是你输入了完成函数的html,请尝试使用下面的代码:
var output ="<ul>";
$.ajax({
url:"lista.php",
dataType:"json"
}).done(function(data) {
$.each(data.Conoscenti, function() {
output +="<li>"+this.Nome+" "+this.Cognome+" è un mio conoscente. È nato il "+this.Nato.Giorno+" "+this.Nato.Mese+" "+this.Nato.Anno+"</li>";
});
output += "</ul>";
$("body").html(output);
});