尝试将两个值推送到数组,以便稍后使用db integration的值。将值添加到数组是顺利的,但是在获取值时,它返回undefined。
var array = [];
var lat = 54.333;
var lng = 12.556;
array.push(lat, lng);
console.log(array[0]); // Returns undefined
如果我只使用console.log(array);
Array[0]
- 0: Object
-- 0: 54.333
-- 1: 12.556
在尝试显示阵列时,我是否错过了某种层次结构?
修改 这是一个代码片段,用于确切地为我工作的内容。
var address = 'Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike';
var array = [];
$.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address), function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({lat, lng});
});
console.log(array)
if (array[0] === undefined) {
console.log('this sucks');
} else {
console.log('it works');
}
答案 0 :(得分:2)
console.log
显示对象在展开时的状态,而不是在记录时的显示方式。
因为jQuery get调用是异步的,所以在记录array
时,它是一个空数组;但是当你在控制台中展开它时,AJAX调用已经完成并且数组已经填满。在记录array[0]
时,array
仍然是一个空数组,因此索引0处没有索引,因此返回undefined
。
您可以使用console.dir
在记录对象时记录对象:
$.get(url, function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({ lat, lng });
});
console.dir(array);
var address = 'Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike';
var array = [];
var url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address);
$.get(url, function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({ lat, lng });
});
console.dir(array);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
如果您想在回调完成后运行代码,可以使用.then
来电:
$.get(url, function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({ lat, lng });
}).then(function() {
console.dir(array);
if (array[0] === undefined) {
console.log('this sucks');
} else {
console.log('it works');
}
});
var address = 'Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike';
var array = [];
var url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address);
$.get(url, function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({ lat, lng });
}).then(function() {
console.dir(array);
if (array[0] === undefined) {
console.log('this sucks');
} else {
console.log('it works');
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
如果您要查找多个地址的坐标,可以push the get calls into an array, and use jQuery's $.when
。这只会在所有查找完成后执行。
var addresses = ['Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike',
'Carrousel de la tour Eiffel, Prom. Quai Branly, 75007 Paris, France'];
var array = [];
var promises = addresses.map(function(address) {
var url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address);
return $.get(url, function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
array.push({ lat, lng });
});
});
$.when.apply($, promises).then(function() {
console.dir(array);
if (array[0] === undefined) {
console.log('this sucks');
} else {
console.log('it works');
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:2)
从你的小提琴样本开始,你的array
在控制台中仍然是空的是正常的,因为你正在使用进行异步处理的$.get({{3} })。
简而言之,您在$.get
操作完成之前记录输出。
完成后,您应该会看到array
具有lat和lng值。
您会注意到控制台中的输出会是,
var address = 'Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike';
var array = [];
$.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address), function(data, status) {
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
/* Array got pushed here */
array.push({
lat,
lng
});
/* This console is executed 3rd */
console.log("Array just got pushed with lat n lng :::", array);
});
/* This console is executed 1st */
console.log("Printing value of array 1 :::", array)
/* These consoles are executed 2nd */
if (array[0] === undefined) {
console.log('this sucks');
} else {
console.log('it works');
}
这是您console.log
> Printing value of array 1 ::: []
> this sucks
> Array just got pushed with lat n lng ::: [Object]
这是您的AJAX
修改强>
根据你的评论,实现你想要的东西的一种方法可能就是这样。
var getAddressLatLng = function (address) {
var defer = $.Deferred();
$.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address), function (data) {
if (data && data.results && data.results.length) {
var res = data.results[0];
if (typeof(res) === "object" && res.hasOwnProperty("geometry") && res.geometry.hasOwnProperty("location") && typeof(res.geometry.location) === "object") {
var lat = res.geometry.location.lat,
lng = res.geometry.location.lng;
if (lat && lng) {
defer.resolve({
"latitude": lat,
"longitude": lng
});
}
}
}
defer.resolve(null);
});
return defer;
};
或者如果你不想使用$.get
的回调函数,你可以这样做;
var getAddressLatLng = function (address) {
return $.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address)).then(function (data) {
if (data && data.results && data.results.length) {
var res = data.results[0];
if (typeof(res) === "object" && res.hasOwnProperty("geometry") && res.geometry.hasOwnProperty("location") && typeof(res.geometry.location) === "object") {
var lat = res.geometry.location.lat,
lng = res.geometry.location.lng;
if (lat && lng) {
return {
"latitude": lat,
"longitude": lng
};
}
}
}
return null;
});
};
要使用它,您只需调用类似函数
即可getAddressLatLng("Champ de Mars, 5 Avenue Anatole France, 75007 Paris, Frankrike").then(function (result) {
/* result is either 'null' or an object with 'lat' and 'lng' property */
if (result) {
console.log("RESULT:: ", result);
/* And you can do your db operation here */
}
});
答案 2 :(得分:0)
您看到未定义,因为这是console.log的返回值。也就是说,console.log没有返回值,因此您在控制台中看到未定义。