我已经完成了这个功能:
function fetchGeo(){
var geoInfo = new Array();
var counter = 0;
$.ajax({
url: 'www.URL.com/req.php',
dataType: 'json',
data: 'action=load',
success: function(data){
//console.log(data);
$.each(data, function(i,geo){
geoInfo[i] = new Array(geo.lat,geo.long,geo.time);
//console.log(geoInfo);
});
return geoInfo;
}
});
}
var geoInfo = fetchGeo();
每次执行此函数时,我都无法将数据放入脚本中的其他位置。
我已经找到了这个,但这对我来说也是失败的:Wait for .each() .getJSON request to finish before executing a callback
答案 0 :(得分:1)
那是因为你没有从 使用回调来处理结果:fetchGeo
函数返回任何内容,而是从匿名成功处理程序返回它,并且在 fetchGeo
函数结束后发生。 / p>
function fetchGeo(callback) {
$.ajax({
url: 'www.URL.com/req.php',
dataType: 'json',
data: 'action=load',
success: function(data){
var geoInfo = [];
$.each(data, function(i,geo){
geoInfo.push([geo.lat,geo.long,geo.time]);
});
callback(geoInfo);
}
});
}
fetchGeo(function(geoInfo){
// here you can use the data
});
答案 1 :(得分:0)
geoInfo
数组的范围是fetchGeo
函数的本地范围。在.each
中创建的匿名函数无法看到该数组。将geoInfo
数组移动到更高的范围,例如fetchGeo
函数之外。
答案 2 :(得分:0)
ajax
本质上是异步的。在从函数返回之前,ajax还没有完成执行请求,所以无论你返回的是一个空数组。
您可以尝试将geoInfo
声明为全局变量,或者在可以访问它的函数的外观中尝试这样的事情。
var geoInfo = new Array();
function fetchGeo(){
var counter = 0;
$.ajax({
url: 'www.URL.com/req.php',
dataType: 'json',
data: 'action=load',
success: function(data){
//console.log(data);
$.each(data, function(i,geo){
geoInfo[i] = new Array(geo.lat,geo.long,geo.time);
//console.log(geoInfo);
});
}
});
}
fetchGeo();
答案 3 :(得分:0)
成功的事情是asynchronius(因此名称为AJAX)。这意味着geoInfo数组不可用。如果你把它从范围中提升到全局水平,那就可以了。
var geoInfo = new Array();
function fetchGeo() {
var counter = 0;
$.ajax({
url: 'www.URL.com/req.php',
dataType: 'json',
data: 'action=load',
success: function(data){
//console.log(data);
$.each(data, function(i,geo){
geoInfo[i] = new Array(geo.lat,geo.long,geo.time);
//console.log(geoInfo);
});
}
});
}
fetchGeo();
答案 4 :(得分:0)
这样的事情应该会有所帮助:
$.ajax({
...
success: function (data) {
var geoInfo = [];
$.each(data, function (i, geo) {
geoInfo.push([geo.lat, geo.long, geo.time]);
});
// Call the the function which relies on `geoInfo`
testFunction(geoInfo);
}
...
});
function testFunction(geoArr) {
// 'geoArr' is available for processing
}