我有一个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
});
}
});
});
答案 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
}
});
这将节省大量请求,并允许您正确处理响应。
上面的代码只是一个例子,因此未经测试。
如果您有任何问题,请与我们联系。