【问题标题】:Javascript array not accessible outside of loop [duplicate]Javascript数组无法在循环外访问[重复]
【发布时间】:2015-11-15 16:13:50
【问题描述】:

我有一个 JSON 对象,其中包含存储在 MySQL 数据库中的数据 ID。我正在遍历 JSON 对象并通过 ajax 将 ID 发送到数据库以返回与该 ID 关联的数据。

在该循环中,返回数据后,我尝试使用以下方法将该数据保存到数组中:

finalArray.push({
    'nodeID' : nodeID,
    'startTime' : sDisplayTime,
    'endTime' : eDisplayTime
});

数据被放入数组中,我可以在循环中使用console.log(finalArray); 来查看它是否输出了正确的数据。我的问题是我无法访问循环之外的整个数组。循环完成后,数组中应该有 3-5 个键,最终输出应该包括返回的所有内容。当我在循环外调用console.log(finalArray); 时,我在控制台中得到一个空白[]

我在循环开始之前/外部声明 finalArray = []; 数组,所以我认为范围不是问题。

当我像finalArray = { event: [ ] } 那样做,然后像这样填充数据:

finalArray.event.push({
    'nodeID': nodeID,
    'startTime': sDisplayTime,
    'endTime': eDisplayTime
});

我可以在循环外console.log(finalArray); 查看数据。不幸的是,我需要一种可以使用sort() 函数的格式,所以这种方式行不通。

有谁知道为什么我不能用第一种方法访问循环外的数组?

这是循环(为显示而简化):

finalArray = [];

jQuery.each(cookieVal, function(i, v) {
    var nodeID = i;

    jQuery.ajax({
        type: "GET",
        url: ajaxurl,
        data: "action=get_scheduled_info&nid=" + nodeID,
        success: function(data) {

            var eventData = JSON.parse(data);
            var sDisplayTime = eventData.start_time;
            var eDisplayTime = eventData.end_time;

            finalArray.push({
                'nodeID': nodeID,
                'startTime': sDisplayTime,
                'endTime': eDisplayTime
            });
        }
    });
});

【问题讨论】:

  • 你能显示循环之类的吗?我猜你是在进行异步调用。
  • 是的,给我一点时间来简化它的显示。
  • 很公平。感谢您的链接。

标签: javascript arrays json scope


【解决方案1】:

您不应该在迭代中进行 AJAX 调用 - 相反,您可以遍历 cookieVal 并制作一个 nodeID 数组以发送到服务器端脚本并返回一个数组。

例如:

var finalArray = [];
var sendArray  = [];

jQuery.each(cookieVal, function(i, v) {
    sendArray.push(i);
});

jQuery.ajax({
        type: "POST",
        url: ajaxurl,
        data: {action: "get_scheduled_info", data: sendArray},
        success: function(data) {

            var eventData = JSON.parse(data);
            var sDisplayTime = eventData.start_time;
            var eDisplayTime = eventData.end_time;

            // Loop round each item and add it to finalArray
        }
    });

这将节省大量请求,并允许您正确处理响应。

以上代码只是一个示例,未经测试。

如果您有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多