Jquery:Ajax调用返回JSON数据的php脚本

时间:2015-04-08 15:08:14

标签: javascript php jquery ajax json

我是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. &Egrave; nato il "+this.Nato.Giorno+" "+this.Nato.Mese+" "+this.Nato.Anno+"</li>";
    });
});
output += "</ul>";
$("body").html(output);

但是html页面显示为空白,甚至没有错误。分析源代码,它只显示ul标记,因为它不在ajax调用之外。任何人都知道如何解决它?谢谢。

4 个答案:

答案 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. &Egrave; 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. &Egrave; 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. &Egrave; 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. &Egrave; nato il "+this.Nato.Giorno+" "+this.Nato.Mese+" "+this.Nato.Anno+"</li>";
    });
    output += "</ul>";
    $("body").html(output);
});