在循环

时间:2015-08-21 16:16:47

标签: javascript arrays json scope

我有一个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
            });
        }
    });
});

1 个答案:

答案 0 :(得分:-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
        }
    });

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

上面的代码只是一个例子,因此未经测试。

如果您有任何问题,请与我们联系。