使用AJAX和JSON将SQL结果存储到Javascript数组中

时间:2014-08-30 15:30:17

标签: javascript ajax json

我想使用Javascript将SQL数据库中的表动态地检索到数组中。

// edit:如果我为数组使用全局JavaScript变量,下面的代码工作正常。但我想传递数据也要动态存储数据。这就是问题的开始。

我的来源:

var getSQL = function (query, array, callback) {
    var req = new XMLHttpRequest();
    req.onreadystatechange = function () {
        if (req.readyState == 4 && req.status == 200) {
            callback(req.responseText, array);
        }
    };
    var param = "?q=" + encodeURIComponent(query);
    req.open("GET", "sql.php" + param, true);
    req.send();
}
function mycallback (json_expr, t_array) {
    t_array = JSON.parse(json_expr);
}

我想在其中存储该请求结果的自定义数组称为my_data

var my_data = [];
getSQL('SELECT * FROM users ORDER BY id', my_data, mycallback);

// wait some time

// then this code gets called via an onclick event
alert(my_data[0]['name']);

结果是undefined。为什么呢?

1 个答案:

答案 0 :(得分:1)

这不起作用,因为更改t_arraymycallback的值只会更改函数范围内t_array的值,而不会更改传递给的值t_array

如果您想使用此结构,则应修改t_array.result = JSON.parse(json_expr); ,因此:

alert(my_data.result[0]['name']);

然后你可以阅读

var getSQL = function (query, callback) {
    var req = new XMLHttpRequest();
    req.onreadystatechange = function () {
        if (req.readyState == 4 && req.status == 200) {
            callback(req.responseText);
        }
    };
    var param = "?q=" + encodeURIComponent(query);
    req.open("GET", "sql.php" + param, true);
    req.send();
}

但提供回调函数而不是数组更常见,如下所示:

var my_data = [];
getSQL('SELECT * FROM users ORDER BY id', function(json_expr){
    my_data = JSON.parse(json_expr);
});

...

alert(my_data[0]['name']);

然后按如下方式调用它:

{{1}}

由于javascript函数闭包的工作原理,回调函数将能够更改my_data var的值。