我正在使用ajax调用从数据库中检索值,然后尝试将这些值插入到数组中(全局声明)。但在调用函数之外,如果我尝试检查数组的值,则显示空数组。这是我的代码:
function functionName() {
var arr1 = [];
var arr2 = [];
$(function() {
$.ajax({
url: "RandomURL",
data: {
some random data
}
}).done(
function(data) {
console.log(data.data);
for (var i = 0; i < data.data.length; i++) {
arr1.push({
x: data.data[i][0],
y: data.data[i][1]
});
arr2.push({
x: data.data[i][0],
y: data.data[i][2]
});
}
});
});
console.log(arr1);
console.log(arr2);
return [{
values: arr1,
key: 'array1 values',
color: '#ff7f0e'
}, {
values: arr2,
key: 'arr2 values',
color: '2ca02c'
}];
}
答案 0 :(得分:0)
如下所示更改,您不需要将这些数组返回到另一个函数,因为您已将其声明为全局:
var arr1 = [];
var arr2 = [];
function functionName() {
$.ajax({
url: "RandomURL",
data: {
some random data
}
}).done(
function(data) {
console.log(data.data);
for (var i = 0; i < data.data.length; i++) {
arr1.push({
x: data.data[i][0],
y: data.data[i][1]
});
arr2.push({
x: data.data[i][0],
y: data.data[i][2]
});
}
});
console.log(arr1);
console.log(arr2);
}
因此,您可以在plod数据中指定值,如:
var plotData = [{
values: arr1,
key: 'array1 values',
color: '#ff7f0e'
}, {
values: arr2,
key: 'arr2 values',
color: '2ca02c'
}];
答案 1 :(得分:0)
您正在返回信息并使用AJAX成功之外的控制台日志。在JQuery中,AJAX默认是异步的。您可以在设置中将其设置为async:false,但通常建议它是异步的。
如果你想让它保持异步,你需要真正完成ajax的done / success部分的所有工作。这会带来潜在的问题,因为需要更多未被封装的全局变量,并调用其他函数并在其中进行后续工作。
或者它可以让你沿着承诺的路径前进,以便在ajax调用完成后按照后续顺序调用函数。
function callAjax() {
$.ajax(...
...done(function(data) {
// do work and then
plotUsingData();
});
}
function plotUsingData() {
// now the graph or display of data is created after the content is loaded
}
答案 2 :(得分:0)
var arr1 = [];
并不真正创建全局变量。 arr1 = [];
确实如此。