将数据从php传输为json,然后将其存储在全局对象中

时间:2014-04-20 13:25:17

标签: javascript jquery json

我有以下代码:

PHP代码:

$data = array();
$data[0]['name'] = "Kj";
$data[0]['age'] = 30;
$data[0]['country'] = "Italy";

$data[1]['name'] = "Dn";
$data[1]['age'] = 18;
$data[1]['country'] = "USA";

$data[2]['name'] = "Jo";
$data[2]['age'] = 22;
$data[2]['country'] = "Switzerland";

$data[3]['name'] = "Ro";
$data[3]['age'] = 34;
$data[3]['country'] = "UAE";

$data[4]['name'] = "Lc";
$data[4]['age'] = 13;
$data[4]['country'] = "UK";

echo json_encode($data);

Javascript代码:

var jsonData = {};
$(document).ready(function () {
    $.get('page.php', function (data) {
        jsonData = jQuery.parseJSON(data);
    });
});

for (var i = 0; i < jsonData.length; i++) {
    $('ul').append("<li>" + jsonData[i].name + "</li>");
}

问题是当把{for循环放在$.get callback里面时,如下所示。

$.get('page.php', function (data) {
    jsonData = jQuery.parseJSON(data);
    for (var i = 0; i < jsonData.length; i++) {
        $('ul').append("<li>" + jsonData[i].name + "</li>");
    }
});

但是当把{for循环放在$.get callback之外时没有打印出任何东西,但是数据已经成功收到,但没有打印出来。

现在,如何将已收到的数据存储在全局变量中以便在任何地方打印?

2 个答案:

答案 0 :(得分:1)

当您使用异步操作(AJAX,超时)时,您应该更改方法。像这样:

function GetData(callback) {
    $.get('page.php', function (data) {
        callback(jQuery.parseJSON(data));
    });
}

GetData(function (data) {
    for (var i = 0; i < data.length; i++) {
        $('ul').append("<li>" + data[i].name + "</li>");
    }
});

答案 1 :(得分:0)

您的代码已经正确地将数据存储在全局变量中。 在F12-javascript控制台中输入jsonData,您就会看到它。

问题在于控制流程,触发jsonData使用的另一个事件是什么?